android危险权限分组,Android6.0及以上申请权限(特殊权限和普通权限)整理

一、为什么要动态申请权限

Android6.0 为了保护用户隐私,将一些权限的申请放在了应用运行的时候去申请。在Android6.0以前的开发中,开发人员只需要将需要的权限在AndroidManifest.xml文件中声明,有的APP一股脑声明了各种各样的权限,用户可能没有细看就安装了,于是这些APP就可以为所欲为,偷鸡摸狗,无法无天。Android6.0把权限分成正常权限和危险权限,AndroidManifest中声明的正常权限系统会自动授予,而危险权限则需要在使用的时候用户明确授予。

换句话说,就是Android 6.0以上的系统在第一次使用危险权限的时候,需要向用户申请,征得用户的同意。如果还是在没有权限的情况下执行操作,系统就会Crash,错误日志为java.lang.SecurityException: Permission Denial。因此,用户对危险权限的申请 ,需要相应的处理。

二、特殊权限(危险权限)

这类权限需要在使用的时候用户动态申请。比如:当用户打开相机拍摄照片的时候,需要开发人员通过代码的方式在打开相机的地方去申请权限。Android6.0中权限问题中开发人员需要注意的是:

1、由于权限API的问题,我们的Actiivty最好是AppCompatActivity类型的,也就是说在你的BaseActivity需要继承AppCompatActivity。

2、权限是分组的,同一组的权限申请其中一个,同组的权限就全部都申请了。比如,应用被授予READ_EXTERNAL_STORAGE权限之后,如果再申请WRITE_EXTERNAL_STORAGE权限,系统会立即授予该权限,不会再弹出权限授予询问的对话框。

(一)特殊权限组(共9组)

54b81cef5c057b76a4d9b89e8a958d10.png

以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整组权限都可以使用了:

(二)申请权限的正确姿势

第一步:将targetSdkVersion设置为23,如果将targetSdkVersion设置为>=23,则必须按照谷歌的要求,动态的申请权限。

第二步:需要申请的所有权限在AndroidManifest文件中声明,包括普通权限特殊权限。

第三步:使用时检查权限,没有权限则申请,共两个过程:

过程1

检查是否开启此权限checkSelfPermission(),如果拥有此权限,则直接做你想做的事情;有没此权限,则向系统申请此权限;

过程2

如果未开启,去向系统申请权限requestPermissions()。用户同意开启权限,则继续执行自己想做的事情。

用户不同意开启权限,则向用户展示该权限作用的文字描述。用户点击OK按钮,继续向系统申请该权限,有种循环授权的味道,不开启该权限,不让使用该功能。

用户不同意开启权限有以下三种情况,用shouldShowRequestPermissionRationale方法判断。

(三)需要注意的地方

1、checkSelfPermission:检查是否开启权限。

2、requestPermissions:请求开启权限,会弹出一个系统对话框,询问用户是否开启这个权限。

3、shouldShowRequestPermissionRationale:Android原生系统中,弹出权限申请的对话框,如果第一次拒绝,第二次会出现“以后不再弹出”的提示框。如果用户勾选了,用户再次申请权限,shouldShowRequestPermissionRationale返回true,意思是说要给用户一个解释,告诉用户为什么要这个权限。

然而,在实际开发中,很多手机对原生系统做了修改,比如小米、华为等某些机型的6.0的shouldShowRequestPermissionRationale就一直返回false,在申请权限时,如果用户选择了拒绝,则下次不会再弹出对话框了,为了防止让用户反感。我的小米6手机7.0,在申请权限时,如果用户选择了拒绝,则下次会再弹出申请权限的对话框。所以同一品牌手机,不同版本之间厂商也做了不同的处理。

我的解决方法是,在回调里面处理,如果用户拒绝了这个权限,则弹框提示说明该权限的作用,然后打开本应用信息界面,由用户自己手动开启这个权限 或者 用代码再次申请权限。

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

5、可以使用申请权限的第三方库,网上应该有。

三、普通权限

以下这些只是普通权限,开发的时候正常使用就行了,需要的权限在清单文件配置即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值