android 6.0对于权限管理比较收紧,因此在适配android 6.0的时候就很有必要考虑一些权限管理的问题。

如果你没适配6.0的设备并且权限没给的话,就会出现类似如下的问题:

  1. java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{b83b87a :com.chexiu.sales/u0a34} (pid=, uid=) with revoked permission android.permission.CALL_PHONE

google官方权限分类:

如下为正常的权限:

  1. ACCESS_LOCATION_EXTRA_COMMANDS
  2. ACCESS_NETWORK_STATE
  3. ACCESS_NOTIFICATION_POLICY
  4. ACCESS_WIFI_STATE
  5. BLUETOOTH
  6. BLUETOOTH_ADMIN
  7. BROADCAST_STICKY
  8. CHANGE_NETWORK_STATE
  9. CHANGE_WIFI_MULTICAST_STATE
  10. CHANGE_WIFI_STATE
  11. DISABLE_KEYGUARD
  12. EXPAND_STATUS_BAR
  13. GET_PACKAGE_SIZE
  14. INSTALL_SHORTCUT
  15. INTERNET
  16. KILL_BACKGROUND_PROCESSES
  17. MODIFY_AUDIO_SETTINGS
  18. NFC
  19. READ_SYNC_SETTINGS
  20. READ_SYNC_STATS
  21. RECEIVE_BOOT_COMPLETED
  22. REORDER_TASKS
  23. REQUEST_INSTALL_PACKAGES
  24. SET_ALARM
  25. SET_TIME_ZONE
  26. SET_WALLPAPER
  27. SET_WALLPAPER_HINTS
  28. TRANSMIT_IR
  29. UNINSTALL_SHORTCUT
  30. USE_FINGERPRINT
  31. VIBRATE
  32. WAKE_LOCK
  33. WRITE_SYNC_SETTINGS

如下为危险权限:

  1. group:android.permission-group.CONTACTS
  2. permission:android.permission.WRITE_CONTACTS
  3. permission:android.permission.GET_ACCOUNTS
  4. permission:android.permission.READ_CONTACTS
  5.  
  6. group:android.permission-group.PHONE
  7. permission:android.permission.READ_CALL_LOG
  8. permission:android.permission.READ_PHONE_STATE
  9. permission:android.permission.CALL_PHONE
  10. permission:android.permission.WRITE_CALL_LOG
  11. permission:android.permission.USE_SIP
  12. permission:android.permission.PROCESS_OUTGOING_CALLS
  13. permission:com.android.voicemail.permission.ADD_VOICEMAIL
  14.  
  15. group:android.permission-group.CALENDAR
  16. permission:android.permission.READ_CALENDAR
  17. permission:android.permission.WRITE_CALENDAR
  18.  
  19. group:android.permission-group.CAMERA
  20. permission:android.permission.CAMERA
  21.  
  22. group:android.permission-group.SENSORS
  23. permission:android.permission.BODY_SENSORS
  24.  
  25. group:android.permission-group.LOCATION
  26. permission:android.permission.ACCESS_FINE_LOCATION
  27. permission:android.permission.ACCESS_COARSE_LOCATION
  28.  
  29. group:android.permission-group.STORAGE
  30. permission:android.permission.READ_EXTERNAL_STORAGE
  31. permission:android.permission.WRITE_EXTERNAL_STORAGE
  32.  
  33. group:android.permission-group.MICROPHONE
  34. permission:android.permission.RECORD_AUDIO
  35.  
  36. group:android.permission-group.SMS
  37. permission:android.permission.READ_SMS
  38. permission:android.permission.RECEIVE_WAP_PUSH
  39. permission:android.permission.RECEIVE_MMS
  40. permission:android.permission.RECEIVE_SMS
  41. permission:android.permission.SEND_SMS
  42. permission:android.permission.READ_CELL_BROADCASTS

那么问题来了,因为这些危险权限导致app在6.0上面崩溃就不应该,所以要找好的方法来解决问题:

库的地址:https://github.com/mylhyl/AndroidAcp

项目中的集成和使用:

1,gradle集成:

  1. compile 'com.mylhyl:acp:1.1.5'

2,代码集成进来,方便修改

我采用2的方式

然后看下实际项目中的使用:

比如针对拨打电话权限的6.0适配:

  1. /**
  2. * 直接拨打电话
  3. */
  4. public static boolean intentToCall(final Context context, final String phoneNumber) {
  5. if (context == null || StringUtil.isEmpty(phoneNumber)) {
  6. return false;
  7. }
  8. //6.0权限处理
  9. Acp.getInstance(context).request(new AcpOptions.Builder().setPermissions(
  10. Manifest.permission.CALL_PHONE).build(), new AcpListener() {
  11. @Override public void onGranted() {
  12. Uri u = Uri.parse("tel:" + phoneNumber);
  13. Intent it = new Intent(Intent.ACTION_CALL, u);
  14. context.startActivity(it);
  15. }
  16. @Override public void onDenied(List<String> permissions) {
  17. }
  18. });
  19. return true;
  20. }

链式调用,提供授权和授权失败两种情况处理

如果提供权限会调用onGranted(){}方法,你只需要在里面添加授权后的操作就行。

如果授权失败会调用onDenied(){}方法,你可以提醒用户授权失败,并进行后续操作。

并且该库具有如下特点:

  • 支持批量权限申请,不需要重写 onRequestPermissionsResult 方法,Activity 与 Fragment 中用法一致,一句话搞定。
  • 处理权限拒绝,或勾选不再询问,导致不能正常使用功能的提示框,支持跳转设置权限界面开启权限,所有提示框文字可自定义。
  • 兼容小米跳转权限设置
  • 增加M版本检测

当然建议代码集成到项目中来,后期万一修改也比较方便。

项目中处理android 6.0权限管理问题的更多相关文章

  1. Android 6.0权限管理

    Android 6.0权限管理 关于权限管理 Android6.0 发布之后,Android 的权限系统被重新设计.在 23 之前 App 的权限只会在用户安装的时候询问一次,App一旦安装后就可以使 ...

  2. Android开发——Android 6.0权限管理机制详解

    .Android 6.0运行时主动请求权限 3.1  检测和申请权限 下面的例子介绍上面列出的读写SD卡的使用例子,可以使用以下的方式解决: public boolean isGrantExterna ...

  3. Android 6.0 权限管理最佳实践

    博客: Android 6.0 运行时权限管理最佳实践 github: https://github.com/yanzhenjie/AndPermission

  4. Android 6.0 权限管理

    google官方例子: https://github.com/googlesamples/android-RuntimePermissions Android 6.0在我们原有的AndroidMani ...

  5. Google Android 6.0 权限完全解析

    注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...

  6. Android 6.0 权限申请辅助 ----PermissionsHelper

    Android 6.0 权限申请辅助 ----PermissionsHelper 项目地址:https://github.com/didikee/PermissionsHelper Android 的 ...

  7. Android_设备隐私获取,忽略6.0权限管理

    1.前言 (1).由于MIUI等部分国产定制系统也有权限管理,没有相关api,故无法判断用户是否允许获取联系人等隐私.在Android 6.0之后,新增权限管理可以通过官方api判断用户的运行状态: ...

  8. ## Android 6.0 权限申请 ##

    Android 6.0 权限申请 1. 以前的权限申请(sdk<23) 直接在AndroidManifest.xml中申明即可: <uses-permission android:name ...

  9. 关于如何在你的Web项目中实现对空间数据访问权限的控制(一)

    Wednesday, 23 JUNE 近来一直在研究关于如何在我的WebGIS项目中实现对空间数据(已发布在GeoServer上)进行权限管理的问题.虽然到目前为止没能找到一个完美的解决方案,但通过这 ...

随机推荐

  1. Moq的使用心得

    Moq的使用心得 1.Moq中Mock Repository时最好是Mock Repository的接口,这样会避免不知名的错误. var mockClubRepository = new Mock& ...

  2. jQuery中Ajax的应用

    一.Ajax介绍 1.什么是Ajax 异步的JavaScript与XML技术,是一种广泛应用在浏览器的网页开发技术. 2.Ajax的优点 a.不需要任何浏览器插件,在任何支持JavaScript的浏览 ...

  3. 使用 Aspose.Cells 实现 excel导入

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. MyEclipse添加ibatis DTD文件实现xml的自动提示功能

    当我们写ibatis配置文件的时候,希望有xml自动提示功能.这就需要我们添加DTD文件 SqlMapConfig.xml中开头部分有这么一句话 <!DOCTYPE sqlMapConfig P ...

  5. 字符转十六进制 String => HEX using "hexdump" on linux

    hexdump 是一款非常简单的有效的将别的形式的文档转换成十六进制的工具. 最详细的使用说明都在 man hexdump 里面,请自行查阅. 这里我摘出几个常用的例子,一目了然: 这里我做了一个实验 ...

  6. [分享]CSS美化浏览器滚动条

    今天看到一个站点的滚动条样式特别漂亮,顺便上网搜了一些相关资料,分享给大家: PS:兼容所有浏览器的滚动条样式目前是不存在的. IE下的滚动条样式 IE是最早提供滚动条的样式支持,好多年了,但是其它浏 ...

  7. JVM内存管理学习总结(一)

    I.JVM进程的生命周期 JVM实例的生命周期和java程序的生命周期保持一致,即一个新的程序启动则产生一个新的JVM进程实例,程序结束则JVM进程实例伴随着消失.那么程序启动和程序终止就是JVM实例 ...

  8. .net程序员求职简历

    .net程序员求职简历 个人概况 姓名 齐志超 学历 专科 毕业学校 河北软件职业技术学院 专业 软件开发与设计 手机 18730269286 年龄 22 性别 男 现居住地 北京 电子邮件 qzc9 ...

  9. Java远程调用邮件服务器,实现邮件发送

    写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器. 邮件服 ...

  10. 小C的树(Treap节点删除)[70/100]

    用Treap暴力模拟,调常数~ 好了,接下来说一下Treap中的删除操作 Step 1:先找到这个结点. Step 2:如果它的儿子≤1,用它儿子替它 否则 把之后做根节点的儿子旋转到根 回到Step ...