A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© lizhenzhen 中级黑马   /  2016-5-29 20:54  /  816 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

检查是否获得权限
通过 ContextCompat.checkSelfPermission(context,permission) 方法,方法返回值为 PackageManager.PERMISSION_GRANTED or PackageManager.PERMISSION_DENIED



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


请求权限后的回调

请求权限后会回调 onRequestPermissionsResult 方法,在activity中重写 onRequestPermissionsResult(requestCode,permissions,grantResults) 方法, grantResults 是int类型的数组每个值为 PackageManager.PERMISSION_GRANTED or PackageManager.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

另外,用户还可以随时手动对运行时权限进行开关,如下图所示:



本篇文章由于代码略长,因此仍然采用的是截图的方式,如果不想自己动手敲,而是想直接复制代码的朋友,可以点击下方 阅读原文 链接,查看原文中的源代码。


1 个回复

倒序浏览
说明:这里引用的是郭霖的文章,具体内容你也可以点开一下链接http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235978&idx=1&sn=74a2e772890050e9a49bd095c981d24e&scene=0#wechat_redirect
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马