Android 6.0运行时权限申请,多权限申请并勾选不再询问后如何处理?

Android开发常见问题集合之一

简单记录下Android项目中7.0系统申请危险权限处理所遇到的问题

使用的github三方框架 RxPermission

我们先来看下【虾米生活】这个返利工具平台UI设计图,参考 [虾米生活App] - 启动页

多种场景,站在用户体验的角度去考虑并处理

 

 

##多权限申请,正常的业务流程

分几种情况:
1. 用户允许 -进入App
2. 用户拒绝 -重新弹出申请权限的dialog -直到用户允许为止
3. 用户拒绝并勾选了‘禁止后不再询问’ - 弹出去设置页面开启权限的dialog - 取消/前往 -前往就到应用设置页面手动开启,开启权限后,返回app自动回调成功(权限申请允许)的方法 - 进入App - 否者下次再弹出去设置页面开启权限的dialog (因为勾选了‘不再询问’后,App是默认申请权限被拒绝并且不再弹出提示)

 

####问题:

如果使用了mRxPermission.requestEach() 进行多权限申请处理,当用户点拒绝权限并勾选了“禁止后不再询问”,代码会执行多次。(流程是每个权限都单独走一次业务逻辑,这样导致程序出现BUG了,用户体验不好)
看,有小伙伴也遇到了~
 

同样的坑···

 


参考解决:

mRxPermission.requestEachCombined(Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.READ_PHONE_STATE)
        .subscribe(permission -> {
            if (permission.granted) {//All权限同意后调用
                new Handler().postDelayed(() ->
                                toStartActivity()
                        , ConsUtils.DELAY_MILLIS);
                LogUtils.logI(" 用户允许权限 ");
            } else if (permission.shouldShowRequestPermissionRationale){
                //只要有一个选择:禁止,但没有选择“以后不再询问”,以后申请权限,会继续弹出提示
                LogUtils.logI(" 拒绝权限,并没有勾选‘不再询问’ ");
                showRequestPermissonsDialog();
            }else {
                // but有个问题:去设置页面手动开启权限后回到app,回调不能自动执行允许权限的代码,
                // 即没办法自动进入App,需要重启App才正常,是否可以在onResume()里处理?
                LogUtils.logI(" 拒绝权限,并勾选了‘不再询问’ ");
                PermissionUtils.showToAppSettingDialog(mActivity);
            }
        });
```

```
private void showRequestPermissonsDialog() {
    DialogUtil.showPermissionsTips(mActivity, "温馨提示",
            getResources().getString(R.string.request_tips_text),
            SplashActivity.this);
}
```

```
public static void showToAppSettingDialog(final Context context, String title, String tips) {
    new AlertDialog.Builder(context)
            .setTitle(title)
            .setMessage(tips)
            .setPositiveButton(context.getResources().getString(R.string.permission_apply_go),
                    (dialog, which) -> {
                        PermissionUtils.toAppSetting(context); //前往手机应用权限手动设置
                    })
            .setNegativeButton(context.getResources().getString(R.string.common_cancel), null).show();
}

大家如果有更好的解决方案,可以留言,分享交流。

 
 或者推荐方案:郭婶出品PermissionX,代码使用和用户体验可以。

        参考连接:https://github.com/guolindev/PermissionX


   

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

callhh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值