权限分两种:正常权限和危险权限。危险权限在targetSdkVersion大于或等于23就要动态申请权限了。危险权限有以下几种:
每组权限中,用户只要授权该组下的一个权限,该组中所有权限都可以用。
如果应用之前请求过此权限但用户拒绝了请求,此方法将返回 true。
如果用户在过去拒绝了权限请求,并在权限请求系统对话框中选择了 Don’t ask again 选项,此方法将返回 false。
如果设备规范禁止应用具有该权限,此方法也会返回 false。所以第一次进入APP申请该权限时,有些设备会返回false(第二次申请才为true)。
返回PackageManager.PERMISSION_GRANTED表示已拥有,不具有则返回PackageManager.PERMISSION_DENIED
ActivityCompat.requestPermissions用于申请权限。
thisActivity,不用多说了,就是当前的Activity名字的一个实例(引用)。
new String[]{Manifest.permission.READ_CONTACTS}是你要申请的权限,你可以写几个权限进入数组里申请。
MY_PERMISSIONS_REQUEST_READ_CONTACTS为你自己定义一个对应的号码,方便系统回调时识别。
这里处理的是权限相应结果。
requestCode对应之前的你自己定义的号码MY_PERMISSIONS_REQUEST_READ_CONTACTS。
grantResults是权限申请结果数组。其结果可以是PackageManager.PERMISSION_GRANTED或PackageManager.PERMISSION_DENIED
这里填写的权限和普通的权限相差无异。
下面来实现一个单权限的申请。
权限申请清单
实现流程:
1.检查是否有该权限
2.检查是否解析受限,如果有则直接申请权限,没有则弹窗提示用户申请权限。
3.系统回调onRequestPermissionsResult反馈申请结果。
4.如果用户拒绝就弹窗提示是否跳转到设置里面的应用软件权限设置页面。
多权限申请和单权限申请类似,在申请时候申请多个而已。
记得在AndroidManifest里填写对应的权限。
相关资料链接:
https://developer.android.com/training/permissions/requesting.html#perm-request
https://developer.android.com/guide/topics/security/permissions.html#defining
https://github.com/qianxiaoai/RuntimePermissionsDemo/tree/dev
谷歌Demo地址:https://github.com/googlesamples/android-RuntimePermissions
本文Demo到Linux公社资源站下载:
------------------------------------------分割线------------------------------------------
具体下载目录在 /2017年资料/1月/17日/Android 6.0动态权限申请/
------------------------------------------分割线------------------------------------------