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

使用的github三方框架 RxPermission

参考图 [虾米生活App] (https://shouji.baidu.com/software/25489697.html) - 启动页
![做的比较细,站在用户体验的角度去考虑周全~](https://upload-images.jianshu.io/upload_images/5634068-5eaeca7a484ed798.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 

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

分几种情况:
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();}

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

哈哈

 
 
   

 

更多相关文章

  1. LibGDX输入模块之振荡器
  2. Android(安卓)Contextual ActionBar (CAB)上下文操作栏使用指南
  3. Android(安卓)EditText监听小数点让用户只能输入小数点后两位
  4. Android(安卓)Selinux 权限处理
  5. android 版本号适配 9.0网络请求方法
  6. 详解Android(安卓)检测权限的三种写法
  7. 非常全的android manifest详解
  8. Android获得Root权限
  9. Android应用程序申请系统管理员权限

随机推荐

  1. [置顶] java/android 设计模式之单例模式
  2. 【Android基础】常用的布局和单位的简介
  3. JS复制各种链接
  4. react-native-swiper苹果正常显示,Android
  5. android framework层添加串口操作
  6. 据说程序员是最爱学习的群体,IT男都知道,这
  7. Android(安卓)Application 对象介绍
  8. Android学习之SharedPreferences
  9. android 界面添加返回一栏
  10. android实战项目五做一个倒计时的button