Young87

当前位置:首页 >个人收藏

android动态权限

@android动态权限
Android版本23以上添加了动态权限,也就是Android M(23)
如何使用动态权限
Activity和fragment都有权限申请的方法

 activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    reqCode)
 fragment.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    reqCode);

这里要强调,如果想要在fragment的onRequestPermissionsResult收到请求结果,那么必须使用fragment本身去申请权限。
下面是权限回调方法

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == reqCode) {
        if (grantResults.length > 0) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
             //权限允许
            }else{
            //权限拒绝
            }
        }
    }
   }

如果用户拒绝了,并且勾选了不在提醒该如何做

if(activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//如果点选了拒绝和不再提醒,那么shouldShowRequestPermissionRationale会返回false
//如果不再提醒,可以在这里弹框让用户去设置里面开启,或者直接跳转到设置页面
 Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
            intent.setData(uri);
            activity.startActivity(intent);
  }

这时候还有一个问题,虽然用户拒绝了,也勾选了不在提醒,但是用户手动到设置中点击了允许,这时候

activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)

依然返回false,这时候其实已经允许了权限,没必要在提醒用户

所以要不要提醒用户,还得加一个判断

int hasWritePermission = activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (!activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE) && hasWritePermission != PackageManager.PERMISSION_GRANTED) {//如果拒绝并且不在提醒,并且权限不允许允许
            showMessageProxy.displayToast("新包放不下了,请小主到设置中开启存储权限");
            Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
            intent.setData(uri);
            activity.startActivity(intent);
            return;
        }

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: 数据挖掘

下一篇: django-实现登录短信验证

精华推荐