Android 6.0运行时权限申请,多权限申请并勾选不再询问后
2019-01-26 本文已影响1人
callhh
简单记录下项目中使用框架RxPermission 申请权限处理所遇到的问题。
参考图 虾米生活App - 启动页
多权限申请,正常的业务流程
分几种情况:
- 用户允许 -进入App
- 用户拒绝 -重新弹出申请权限的dialog -直到用户允许为止
- 用户拒绝并勾选了‘禁止后不再询问’ - 弹出去设置页面开启权限的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();
}
大家如果有更好的解决方案,可以留言哈。‘
不吝赐教感谢啦~~