美文网首页
2020-10-31

2020-10-31

作者: 天堂守望者 | 来源:发表于2020-10-31 08:27 被阅读0次

    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);

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

    相关文章

      网友评论

          本文标题:2020-10-31

          本文链接:https://www.haomeiwen.com/subject/votsvktx.html