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;
        }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值