动态权限适配方案

权限管理系统的变化

在Android6.0(M)之前,在用户安装应用的时候会产生一个权限列表,只有用户允许这些权限后,应用才可以正常的安装,这就会产生一个问题,这些权限对用户是不具有感知性的,也就是说用户都不知道你要这些权限干什么,我明明装的是一个阅读类型的应用,你却要我拨打电话的权限,你想干嘛呢?当然绝大部分的开发者是善意的,但也避免不了一些特殊人群利用这些“漏洞”做一些不好的事情。
而在Android6.0(M)之后,用户是可以不管权限直接安装应用的,当应用需要调用某些权限的时候,会给予用户一个通知与说明,我要这些权限干什么,这样下来可以让用户有更加清醒的权限分配意识,也在一定程度上更加人性化的保护了用户的隐私,避免了“权限一刀切”。

权限的分组

在Android6.0(M)之后,对权限进行了分类,大致有这三种:

  • 普通权限 正常权限,是对手机的一些正常操作,手机的震动,网络访问,蓝牙等权限,这些权限会在应用被安装的时候默认授予,用户不能拒绝,也不能取消,需要和Android6.0(M)之前的系统,在AndroidManifest.xml声明即可
  • 危险权限 运行中需要处理的权限,这些权限会关系到用户的隐私或影响到其他应用的运行,比如打电话,获取联系人、读写权限、发送信息权限、照相机权限等。
  • 特殊权限 比如:系统级别对话框:SYSTEM_ALERT_WINDOW 修改系统设置:WRITE_SETTINGS

动态适配权限的申请步骤

  1. 当你的应用targetSdkVersion小于23的时候,就算你运行在Android6.0系统上,它也会默认采用以前的权限管理机制。当你的targetSdkVersion大于等于23的时候且在Andorid6.0(M)系统上,它才会采用新的这套权限管理机制
  2. 在AndroidManifest.xml中申请你需要的权限,包括普通权限和需要申请的特殊权限。这是为了兼容低于m版本的系统
  3. 开始申请权限: 首先进行应用权限检查(checkSelfPermission()方法),检查应用是否有执行该方法所需要的权限,如有则可以正常运行,如没有则进行权限申请。进行权限申请时,首先会检查一下用户之前是否有响应过该权限的申请shouldShowRequestPermissionRationale,如没有,则显示权限申请对话框,如有,则检查用户之前是否有勾选“不再提醒”的选项,如没有,显示权限申请对话框,如有,则进行应用无权限异常运行。显示权限对口框后,判断用户是否允许应用权限申请(requestPermissions()),如是,则进行应用有权限正常运行,如否,则进行应用无权限异常运行。

      而代码实现则是:

-->1、使用Context.checkSelfPermission()接口先检查权限是否授权。

-->2、使用Activity.shouldShowRequestPermissionRationale()接口检查用户是否勾选不再提醒。

-->3、第2步返回为true时,表示用户并未勾选不再提醒选项,使用Activity.requestPermissions()接口向系统请求权限。

-->4、第2步返回为false时,表示用户已勾选不再提醒选项,则应用该弹框提示用户。

-->5、第3步执行后,不论用户是否授予权限,都会回调Activity.onRequestPermissionsResult()的函数。在Activity中重载onRequestPermissionsResult()函数,在接收授权结果,根据不同的授权结果做相应的处理。

备注:

(1)在AndroidManifest.xml 申请你需要所有权限,包括普通权限和需要申请的特殊权限。
(2)checkSelfPermission:检查是否拥有这个权限
(3)requestPermissions:请求权限,一般会弹出一个系统对话框,询问用户是否开启这个权限。
(4)shouldShowRequestPermissionRationale:Android原生系统中,如果第二次弹出权限申请的对话框,会出现“以后不再弹出”的提示框,如果用户勾选了,你再申请权限,则shouldShowRequestPermissionRationale返回true.

   (5)每个应用都有自己的权限管理界面,里面有本应用申请的权限以及各种状态,即使用户已经同意了你申请的权限,他也随时可以关闭


你可能感兴趣的:(动态权限适配方案)