您的位置:首页 > 移动开发 > Android开发

Android6.0权限适配

2017-01-19 17:42 232 查看
关于Android6.0权限的一些知识在上一篇博客中已经提过了,这里就不多说了。


开始

权限的适配主要就是两步,一是请求权限,二是系统应答,我们主要在这两个地方进行封装。我们把这两步操作封装在XPermissionActivity中。

1.定义PermissionHandler用于权限回调



onGranted 当用户同意时调用

onDeied 当用户拒绝时调用

onNeverAsk 当用户选择拒绝,并勾选不再提示时调用,这里可以向用户展示如何在系统设置里打开权限的流程,不然用户一旦勾选了都不知道去哪里开启。

2.请求权限



PermissionUtils是PermissionsDispatcher中使用的工具类,主要是一些权限检查的方法。


首先判断是否拥有权限,有的话直接回调PermissionHandler的onGranted,没有的话则持有PermissionHandler对象,发起权限请求。这里把PermissionHandler放在成员变量而不是用一个Map来缓存,主要是因为正常情况下是不会并发请求权限的,而且要申请多个权限的话是可以批量申请的,所以这里简单处理。

3.权限结果处理



这里的处理主要参考PermissionsDispatcher生成的代码,逻辑也很简单。首先判断了对TargetSDK小于23的再次检查权限,接着判断权限返回结果是否成功。 这里需要注意的是,当用户拒绝权限并勾选了不再提示时,PermissionUtils.shouldShowRequestPermissionRationale返回false,这里默认处理弹出一个toast提示用户到设置-应用-权限中打开。

4.调用



调用的方式和以前一样,继承XPerssionActivity,调用requestPermission这里传入需要请求的权限数组。


反馈

上一篇博客中,不少朋友关于[基础权限]有一些争议,因为之前说到"不给基础权限就不让使用"。我这里所说的基础权限是相对于App而言的,比如: 微信的基础权限是[位置]和[电话状态],在启动微信的时候会看到这两个权限的授权,只要任一一个不通过就无法进入微信,这样的处理是比较合理的,如果要在代码中去适配这两个权限的话,估计要改动的地方非常大。

目前主流App的处理方式是在获取权限之前给用户一个友好的提示:


GitHub地址 https://github.com/a5533348/XPermission
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: