这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本篇文章主要介绍了 Android 手动获取判断处理权限的方法,具有很好的参考价值。下面跟着小编一起来看下吧
主要用到的几个方法:
- //检查权限
- int checkSelfPermission(String)
- //申请权限
- void requestPermissions(int, String...)
- //是否应该显示请求权限的说明
- boolean shouldShowRequestPermissionRationale(String)
- //处理权限结果回调
- void onRequestPermissionsResult(int,String[],int[])
是否有权限常量标识:
- PackageManager.PERMISSION_DENIED:拒绝了。
- PackageManager.PERMISSION_GRANTED:授权了
上述四个方法中,前三个方法在 support-v4 的 ActivityCompat 中都有,建议使用兼容库中的方法。最后一个方法是用户授权或者拒绝某个权限组时系统会回调 Activity 或者 Fragment 中的方法。
1. checkSelfPermission(String)
检查权限
1. 检查某一个权限的当前状态,你应该在请求某个权限时检查这个权限是否已经被用户授权,已经授权的权限重复申请可能会让用户产生厌烦。
2. 该方法有一个参数是权限名称,有一个 int 的返回值,用这个值与上面提到的两个常量做比较可判断检查的权限当前的状态。
- if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
- != PackageManager.PERMISSION_GRANTED) {
- // 没有权限,可以在这里重新申请权限。
- }else{
- // 有权限了。
- }
2. requestPermissions(int, String…)
申请权限
请求用户授权几个权限,调用后系统会显示一个请求用户授权的提示对话框,App 不能配置和修改这个对话框,如果需要提示用户这个权限相关的信息或说明,需要在调用 requestPermissions() 之前处理
该方法有两个参数:
int requestCode: 会在回调 onRequestPermissionsResult() 时返回,用来判断是哪个授权申请的回调。
String[] permissions: 权限数组,你需要申请的的权限的数组。
由于该方法是异步的,所以无返回值,当用户处理完授权操作时,会回调 Activity 或者 Fragment 的 onRequestPermissionsResult() 方法。
- ActivityCompat.requestPermissions(activity, new String[] {
- Manifest.permission.READ_CONTACTS
- },
- MMM);
3. onRequestPermissionsResult(int,String[],int[])
处理权限结果回调
1. 该方法在 Activity/Fragment 中应该被重写,当用户处理完授权操作时,系统会自动回调该方法
2. 该方法有三个参数:
int requestCode: 在调用 requestPermissions() 时的第一个参数。
String[] permissions: 权限数组,在调用 requestPermissions() 时的第二个参数。
int[] grantResults: 授权结果数组,对应 permissions,具体值和上方提到的 PackageManager 中的两个常量做比较。
- @Override
- public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
- switch (requestCode) {
- case MMM: {
- if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- // 权限被用户同意,可以做你要做的事情了。
- } else {
- // 权限被用户拒绝了,可以提示用户,关闭界面等等。
- }
- return;
- }
- }
- }
4. shouldShowRequestPermissionRationale(String)
是否应该显示请求权限的说
1. 第一次请求权限时,用户拒绝了,调用 shouldShowRequestPermissionRationale() 后返回 true,应该显示一些为什么需要这个权限的说明。
2. 用户在第一次拒绝某个权限后,下次再次申请时,授权的 dialog 中将会出现 "不再提醒" 选项,一旦选中勾选了,那么下次申请将不会提示用户。
3. 第二次请求权限时,用户拒绝了,并选择了 "不在提醒" 的选项,调用 shouldShowRequestPermissionRationale() 后返回 false。
4. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale() 返回 false 。
5. 加这个提醒的好处在于,用户拒绝过一次权限后我们再次申请时可以提醒该权限的重要性,面得再次申请时用户勾选 "不再提醒" 并决绝,导致下次申请权限直接失败。
- if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {// 没有权限。
- if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
- // 用户拒绝过这个权限了,应该提示用户,为什么需要这个权限。
- } else {
- // 申请授权。
- ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
- }
- }
- ...
- @Override
- public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
- switch (requestCode) {
- case MMM: {
- if (grantResults.length > 0
- && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- // 权限被用户同意。
- } else {
- // 权限被用户拒绝了。
- }
- return;
- }
- }
- }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持 PHPERZ!
来源: http://www.phperz.com/article/17/0519/334655.html