Android 运行时权限勾选不再询问后的处理
来源:互联网 发布:cbox正在解析直播数据 编辑:程序博客网 时间:2024/05/26 15:56
我们都知道,当第一次请求权限申请被拒绝后再进行第二次申请时,对话框中会多出一个 不再询问 的复选框。如果勾选了该复选框并且拒绝请求,那么以后将无法再申请该权限。也就是说在调用 requestPermissions()
后, onRequestPermissionsResult()
会立刻被调用并且申请结果为 PERMISSION_DENIED
。 其实这个时候还是有一根救命稻草的。
判断是否勾选不再询问
首先需要判断用户是否勾选了不再询问。
@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { // 拒绝授权 if (grantResults[0] == PackageManager.PERMISSION_DENIED) { // 勾选了不再提示 if (! ActivityCompat.shouldShowRequestPermissionRationale (this, permission.READ_EXTERNAL_STORAGE)) { // ... } }
ActivityCompat 位于 support.v7 包中,因为运行时权限是 6.0 的新特性,使用该类可以省略对版本的判断
当权限申请被拒绝并且 shouldShowRequestPermissionRationale()
返回 false 就表示勾选了不再询问。
跳转到设置界面
现在我们唯一能做的就是跳转到我们 App 的设置界面,让用户手动开启权限了。
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", getPackageName(), null);intent.setData(uri);startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
更好的做法应该是先弹出对话框询问用户是否要授予权限。
跳转到设置界面调用的是 startActivityForResult()
而不是 startActivity()
。
在 onActivityResult()
中没有必要对 resultCode 进行判断,因为用户只能通过返回键才能回到我们的 App 中,所以 resultCode 总是为 RESULT_CANCEL。
在
onActivityResult()
中还需要对权限进行判断,因为用户有可能没有授权就返回了!
1 0
- Android 运行时权限勾选不再询问后的处理
- Android6.0处理不再询问的权限问题
- Android 6.0 运行时权限的处理
- Android6.0运行时权限封装(避免用户选择不再提示后无法获取权限的问题)
- [Android] Android M 运行时权限处理
- Android中的运行时权限处理,最简单的方法。
- Android运行时权限(6,0后动态权限)
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 Marshmallow运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- ScrollView起始位置不是最顶部的解决办法
- LNMP一键安装详解
- Activity之间利用Intent进行数据的传递
- ObjcRuntimeGuide笔记
- Java线程锁(一)——wait(),notify(),synchnorized使用
- Android 运行时权限勾选不再询问后的处理
- RAII理念 应用于MFC 按钮使能控制
- 从Java视角理解系统结构(一)CPU上下文切换
- 如何高效的使用postman
- Spring入门(4),装配Bean,基于xml
- 利用JQuery实现左侧菜单栏可折叠功能
- 树莓派3 opencv调用摄像头(C++和Python)
- hdu3605 二分图多重匹配(hungary算法)
- ABI(Application Binary Interface)