判断通知权限状态
一、背景
做啥事肯定是有原因的,最近在做和H5那边交互,那边申请某个权限之前,需要知道该权限状态,其中一个状态,就是判断用户是否永久拒绝了此权限(拒绝且不在提醒),这个就比较坑,iOS那边是有方法直接获取的,但是Android这边貌似没有直接获取此状态的方法(有找到此方法的小伙伴请留言)。我们最熟悉的权限检测方法ActivityCompat.checkSelfPermission(activity, permission),但是此方法只返回true和false,true是已授权,false是用户拒绝了此权限,无法应付需求
二、实现逻辑
1.不会的当然是百度,百度中找到了一个方法ActivityCompat.shouldShowRequestPermissionRationale(activity, permission),此方法也只返回true和false。以下是每种情况返回值
- 未请求权限,返回false
- 请求了权限,用户选择了拒绝权限,但不是永久拒绝,下次申请权限还会弹窗,这时候返回值为true
- 请求了权限,用户决绝了权限,并且是永久拒绝(选择了拒绝且不在提示),此时返回值为false
- 用户同意了权限,此时返回值为false
2.找到了此方法,离成功就不远了。现在来说下具体判断逻辑,我们先总结下,一共会出现的几种状态,第一种就是还没申请过此权限,第二种是用户已同意权限,第三种就是申请了权限,被用户拒绝,但下次申请还会弹窗提醒,第四种就是我们要找的,用户拒绝了权限,并且下次不会再提示
- 第一种状态,无法用提供的两个方法判断,需要做一个本地存储,判断是否申请过此权限,可以用SharedPreferences,以权限名为key,当申请此权限,就记录一下。
- 第二种状态就比较好判断,直接用
ActivityCompat.checkSelfPermission(activity, permission)判断为true就行 - 第三种状态,直接用
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)判断为true就行 - 第四种状态就不用判断了,else就行
三、具体代码
不单独获取状态,包含了申请权限,做了个简单的权限申请封装,目前只做申请单个权限功能,自己可以加多权限处理。说了这么多废话,现在具体上代码( ˘•ω•˘ )
SharedUtils工具类,需要先SharedUtils.init(context)初始化,不然会报错
具体调用方法
- 在申请权限的activity中需要加上一下代码
- 获取状态代码
status就是返回的那四种状态
- 额外权限申请方法
申请权限回调结果isFlog,true同意权限,false为拒绝权限

