Android 6.0运行时权限问题

google在2015年就推出了Android 6.0系统,我们也知道,在Android 6.0系统中,最重要的就是提供了动态权限管理,也叫做运行时权限机制

对于Android 6.0的运行时权限机制,有以下几点:

1、6.0系统默认为targetSDKVersion小鱼23的应用授予了所申请的全部权限,因此,对于6.0以前的版本,我们可以设置targetSdkVersion=22,程序运行时也不会崩溃。但是如果用户自己手动的设置了取消权限,则会影响我们的APP的正常运行,甚至会影响到功能的使用,这种情况将严重影响用户体验,也是我们所不能接受的

2、google将权限分为两类:normal permissions和dangerous permissions,

     2.1> normal permissions权限一般不会涉及用户隐私,也无须用户授权,主要在manifest里申明就OK,程序安装时候自动授权就好,而且用户也不能手动取消该类授权

     2.2> dangerous permissions权限一般都会涉及到用户的隐私,因此需要用户手动授权的,比如读取SD卡、通讯录等等,dangerous permissions是以分组的形式给出的,一组中的一个权限被授权了,该组的其他权限也将会被自动授权。此外,申请时候弹出的权限说明也是对整个权限组的说明,而不仅仅是对单个权限的说明

3、实现支持运行时权限,只要在build.gradle中设置targetSdkVersion=23即可。

      eg:调用打电话的权限,程序运行时,会先判断当前APP是否拥有permission.CALL_PHONE的权限,如果有,则直接调用打电话功能;如果没有,则弹出提示框进行权限申请。onRequestPermissionResult就是申请权限的回调,如果用户“允许”(getResults【0】== PackageManager.PERMISSION_GRANTED),则调用打电话功能。如果用户拒绝,弹出提示框提示用户该权限已被拒绝。如果用户选择“拒绝”,则下一次还会弹出权限申请提示框,只不过这一次会多出一个选项,叫“不再询问”,如果用户勾选了该选项,则下次不会弹出权限申请提示框,而是直接调用onrequestpermissionResult,回调结果为最后一次用户的选择。此时,若想要再次打开该权限,则需要在“设置 -- 应用--配置应用--应用权限--XX权限”中操作。

4、处理“不再询问” 选项

      如果用户选择了“不再询问”现象,这时候需要给用户一个友好的提示,就需要使用shouldShowRequestPermissionRational方法,这个方法用来帮助开发者向用户解释权限的情况,如果用户选择了“不再询问”,则shouldShowRequestPermissionRational会返回false,这时候我们就需要弹出一个dialog来提醒用户该权限的重要性

5、PermissionDispatcher框架的使用

 1》在项目的gradle中添加 classpath 'com.neenbedankt.gralde.plugins:android-apt:1.8'

 2》在APP的gradle中添加 apply plugin 'android-apt'

       dependencies{

                    compile 'com.github.hotchemi:permissionsdispatcher:2.1.3'

                    apt   'com.github.hotchemi:permissionsdispatcher-processor:2.1.3'

       }

3》  在activity或者fragment上添加注解  @RuntimePermissions

       在需要获取权限的方法上添加注解  @NeedsPermmission(Manifest.XX)

       提示用户为何要开启此权限  在方法上添加注解  @OnShowRationale(Manifest.XX)

       在用户拒绝时候的提示  @OnPermissionDenied(Manifest.XX)

       在用户选择“不再询问” 的时候的注释  @OnNeverAskAgain(Manifest.XX)

      然后重新编译一下程序,会自动生成一个辅助类XXActivityPermissionDispatcher,其他的事情交给这个类来做就OK了,其实也就是在activity或者fragment的OnRequestPermissionResult()方法中调用此类的OnRequestPermissionResult方法即可


 

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值