详解Android 6.0运行时权限

 

周五给大家带来一篇简单易懂的小短文,提前祝大家周末愉快!...



明天就是周末了,激动的心情已然按捺不住。我猜大家今天都已没什么学习精神了,因为根据以往的历史数据,周五的文章阅读量总是最低的。那么今天不给大家带来什么高端复杂的技术,而是一篇简单易懂的6.0运行时权限讲解。我知道目前国内大多数的项目都还没有去兼容6.0系统,但现在6.0的设备已经慢慢多起来了,足以引起我们的重视,希望这篇文章可以给大家带来帮助,提前祝大家周末愉快。

本篇文章由 yuyue 投稿,在此表示感谢。

从Android 6.0开始,不再是安装应用时用户确定获得全部的权限.而是在使用软件过程中需要该权限时,弹出对话框让用户选择权限.不仅如此,用户选择权限后还可以关闭。

检查是否获得权限

通过ContextCompat.checkSelfPermission(context,permission) 方法,方法返回值为PackageManager.PERMISSION_GRANTED orPackageManager.PERMISSION_DENIED

请求权限

通过 ActivityCompat.requestPermissions(activity,permissions,requestCode),第二个参数是一个String数组,第三个参数是请求码便于在 onRequestPermissionsResult 方法中根据requestCode进行判断:
请求权限后的回调

请求权限后会回调onRequestPermissionsResult 方法,在activity中重写onRequestPermissionsResult(requestCode,permissions,grantResults) 方法,grantResults 是int类型的数组每个值为PackageManager.PERMISSION_GRANTED orPackageManager.PERMISSION_DENIED 分别对应 permissions 的每个请求:

告诉用户为何需要权限

ActivityCompat.shouldShowRequestPermissionRationale(activity,permission)  这个方法是在用户拒绝权限后返回true。也就是说:用户第一次点击一个需要权限的地方,该方法返回false(因为用户没拒绝~),当用户拒绝掉该权限,下次点击此权限处,该方法会返回true。可在里面进行对该权限的说明,然后弹出权限让用户选择,并且对话框有don't ask again选项:



用户选择don't ask agian后

ActivityCompat.shouldShowRequestPermissionRationale(activity,permission)  方法一直返回false,并且 ActivityCompat.requestPermissions 不会弹出对话框,系统直接deny,并回调 onRequestPermissionsResult 方法:

用户拒绝权限演示


用户接受权限演示


补充

android权限有 normal 和 dangerous 两种,normal权限系统会自动赋予给应用程序,dangerous 权限则需要进行运行时权限处理。访问下面网址查看所有的dangerous权限:

https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

另外,用户还可以随时手动对运行时权限进行开关,如下图所示:
本篇文章由于代码略长,因此仍然采用的是截图的方式,如果不想自己动手敲,而是想直接复制代码的朋友,可以点击下方 阅读原文 链接,查看原文中的源代码。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:


    关注 郭霖


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册