欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android 6.0权限申请以及拒绝后的控制解析

程序员文章站 2022-06-23 11:58:16
android 6.0权限申请以及拒绝后的控制解析,Android 6.0后官方对权限做了更改,一些涉及到用户隐私的权限必须要用户手动允许;而对于某些app来说,某个权限一旦被用户...

android 6.0权限申请以及拒绝后的控制解析,Android 6.0后官方对权限做了更改,一些涉及到用户隐私的权限必须要用户手动允许;而对于某些app来说,某个权限一旦被用户拒绝,则面临的是整个app的瘫痪,所以,我们要在合适的位置对出现的异常情况进行特殊操作:
首先调用权限的方法:

ActivityCompat.requestPermissions(final @NonNull     Activity activity,final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode)

此方法的三个参数:①为调用权限的当前activity
②权限数组,所有的权限都可以整合到这里
③请求码,用来判断是此次请求操作,后面可以用到

此方法已经判断了sdk>=23的情况,所以我们无需再次判断。
另外有时候我们在需要某个权限的时候,不知道是否已经申请过,这时候我们就需要检查一下,这里检查权限的代码为:

ActivityCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission)

其中①context为当前上下文对象
②permission为需要检查的权限为字符串类型
此方法返回值为int 型,如果==0,则代表已经拥有过权限;如果==-1,则代表还未申请此权限,此方法在任何时间都可以判断。

再一个就是权限申请都是以弹窗的形式让用户选择允许还是拒绝;不管用户是选择哪一项,在点击完成(如果同时申请多个权限,则需要所有权限全部点击完)后,必会触发下面这个回调方法:

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
            @NonNull int[] grantResults)

这个方法是FragmentActivity实现ActivityCompat.OnRequestPermissionsResultCallback后的回调方法,用户在activity中只要重写这个方法就可以了;
这个方法中有三个参数:①代表上面申请权限时提供的请求码
②是此次申请的所有权限的数组,数组中元素顺序按照申请时的顺序排列;
③返回的允许还是拒绝的结果码,以int数组的方式一一对应于②参数的权限,其中每个元素只有两种值:0和-1,0即是代表已经允许,-1则代表用户主动拒绝;
通过这个方法我们就可以根据用户的回应选择不同的处理方式,比如如果某个权限用户必须允许,我们则可以在用户拒绝后强制弹出一个不可取消的dialog,引导用户进入权限设置页面进行设置,用户进入权限页面的代码如下:

Intent intent = new Intent();  intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);

好了,具体权限申请这块的基本需求就只有这么多了,thanks