android 6.0以上版本 运行时权限
2017-10-09 19:16
363 查看
在AndroidManifest文件中添加需要的权限。
这个步骤和我们之前的开发并没有什么变化,试图去申请一个没有声明的权限可能会导致程序崩溃。
检查权限
2
3
4
5
6
这里涉及到一个API,
申请授权
2
3
该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。可以从方法名
处理权限申请回调
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ok,对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了~
当然,到此我们的权限申请的不走,基本介绍就如上述。不过还有个API值得提一下:
2
3
4
5
6
7
8
这个API主要用于给用户一个申请权限的解释,该方法只有在用户在上一次已经拒绝过你的这个权限申请。也就是说,用户已经拒绝一次了,你又弹个授权框,你需要给用户一个解释,为什么要授权,则使用该方法。
那么将上述几个步骤结合到一起就是:
这个步骤和我们之前的开发并没有什么变化,试图去申请一个没有声明的权限可能会导致程序崩溃。
检查权限
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { }else{ // }1
2
3
4
5
6
这里涉及到一个API,
ContextCompat.checkSelfPermission,主要用于检测某个权限是否已经被授予,方法返回值为
PackageManager.PERMISSION_DENIED或者
PackageManager.PERMISSION_GRANTED。当返回DENIED就需要进行申请授权了。
申请授权
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, 1);1
2
3
该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。可以从方法名
requestPermissions以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。
处理权限申请回调
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the // contacts-related task you need to do. } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ok,对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了~
当然,到此我们的权限申请的不走,基本介绍就如上述。不过还有个API值得提一下:
// Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. }1
2
3
4
5
6
7
8
这个API主要用于给用户一个申请权限的解释,该方法只有在用户在上一次已经拒绝过你的这个权限申请。也就是说,用户已经拒绝一次了,你又弹个授权框,你需要给用户一个解释,为什么要授权,则使用该方法。
那么将上述几个步骤结合到一起就是:
// Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) { // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an // app-defined int constant. The callback method gets the // result of the request. }
}
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/50709663; 本文出自:【张鸿洋的博客】
相关文章推荐
- Android 6.0及以上版本的运行时权限介绍
- app在android 6.0或以上平台版本运行过程中请求权限
- Android 6.0及以上版本的运行时权限介绍
- Android 6.0及以上版本的运行时权限介绍
- Android 6.0版本以后运行时权限提醒
- Android 6.0以上 需要运行时申请的权限(一)
- Android M 6.0以上 需要运行时申请的权限--easypermissions库
- Android运行时权限使用详解(适用于Android 6.0及以上)
- <Android>--6.0版本获取运行时的权限方法
- Android 6.0 及以上运行时权限处理
- Android 6.0+版本运行时权限的动态申请与主要危险权限组列举
- Android学习_6.0以上系统的运行时权限
- Android 6.0及以上运行时权限处理完全解析
- Android 6.0以上 需要运行时申请的权限(二)
- Android 6.0以上版本添加录音权限checkSelfPermission报错问题
- android 6.0及以上 运行时权限申请(动态权限申请)
- 【译】Android开发者应该知道的API6.0以上运行时权限
- Android 6.0以上版本权限管理
- Android 6.0运行时权限
- Android 6.0 运行时权限处理