Android 6.0后官方对权限做了更改,一些涉及到用户隐私的权限必须要用户手动允许;而对于某些app来说,某个权限一旦被用户拒绝,则面临的是整个app的瘫痪,所以,我们要在合适的位置对出现的异常情况进行特殊操作:
首先调用权限的方法:
ActivityCompat.requestPermissions(final @NonNull Activity activity,final @NonNull String[] permissions, final @IntRange(from = 0) int requestCode)
1
此方法的三个参数:①为调用权限的当前activity
②权限数组,所有的权限都可以整合到这里
③请求码,用来判断是此次请求操作,后面可以用到
此方法已经判断了sdk>=23的情况,所以我们无需再次判断。
另外有时候我们在需要某个权限的时候,不知道是否已经申请过,这时候我们就需要检查一下,这里检查权限的代码为:
ActivityCompat.checkSelfPermission(@NonNull Context context, @NonNull String permission)
1
其中①context为当前上下文对象
②permission为需要检查的权限为字符串类型
此方法返回值为int 型,如果==0,则代表已经拥有过权限;如果==-1,则代表还未申请此权限,此方法在任何时间都可以判断。
再一个就是权限申请都是以弹窗的形式让用户选择允许还是拒绝;不管用户是选择哪一项,在点击完成(如果同时申请多个权限,则需要所有权限全部点击完)后,必会触发下面这个回调方法:
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults)
1
2
这个方法是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);
好了,具体权限申请这块的基本需求就只有这么多了 网上摘录的
网友评论