让你相见恨晚的android权限业务实践
在上一篇Android权限中,我们介绍了一些权限相关的知识,也简述了新的Android M带来的权限变化,我们如何应对这种变化?是摆着我们面前的紧要问题。
现在我们的业务的targetSdkVersion是小于23的,如果有一天我们需要升级到23,那么如何保证业务能按之前一样功能正常?
对我们来说,当升级到23后,在业务需要使用某项权限的时候,会弹窗让用户选择,当用户拒绝权限的时候,我们的业务如果没有正常处理,极有可能会导致程序异常,比如出现各种crash、页面异常显示、操作无响应等等问题。
针对上面的疑问,我们做了如下的工作:
主要分三大部分:梳理权限及功能的对应关系、屏蔽权限测试影响、机型权限检查,如下图。
下面分别介绍三部分实际的内容:
一、业务权限梳理
1.1梳理出业务所有权限
通过以下的手段把业务的权限列表梳理出来:
- 获取业务本身自己的权限
可以通过PackageManager.getPackageInfo.(pkgName, PackageManager.GET_PERMISSIONS).requestedPermissions获取到。
2. 获取其他业务的权限
可以通过Android XmlResourceParser解析AndroidManifest.xml文件获取到。
1.2找出各权限和功能的对应关系
可以通过和相应功能的开发进行沟通确定。
确定不了的,需要查看对应功能代码,找出关键的触发权限的API,参考这篇文档:
http://dx.doi.org/10.1145/2046707.2046779,这个是老外总结的api和权限对应关系,Google没有给出这个关系。
二、利用Xposed屏蔽权限进行测试
2.1安装Xposed框架安装器
前提:手机需要root过。
Xposed 框架需要使用安装器进行安装,所以我们需要先安装Xposed 框架安装器,安装完成打开后点击框架(如图中红框位置),进行框架的安装。
点击后进入框架安装、升级界面,我们点击“安装/更新”,会出现ROOT授权提示,许可即可。Xposed 框架安装完成后重启手机才能激活,可直接点击重启也可手动重启。
2.2安装权限修改器
安装Permission Master权限修改器,网上可以直接下载到。
2.3选用模块
勾选后模块就开始发挥作用了。
2.3选择应用,打开/禁止权限后测试
禁止/允许某个权限后,对权限相应的功能进行测试,看功能是否正常。
三、权限检查
针对Android的权限机制,做了一个简单的权限检查DEMO,主要功能如下:
根据输入的权限,检查手机上该权限是否可用。
如果权限不可用,尝试申请下该权限,返回结果。
3.1 targetSdkVersion、compileSdkVersion配置
在build.gradle中可以灵活的指定targetSdkVersion、compileSdkVersion版本,如果需要检查6.0以上的系统,请都设置成23,如6.0以下的,请根据实际项目情况设置。
3.2 检查输入
我们把所有待检查的权限都放到一个列表数组中,比如
做完后续的检查输入源。
3.3开始检查
如果是23版本的,使用checkSelfPermission进行检查,否则使用checkCallingOrSelfPermission进行检查,当然也可以直接用v4兼容库的ContextCompat.checkSelfPermission(),这样就不需要区分版本了。
当没有权限的时候,我们尝试用v4兼容库的ActivityCompat.requestPermissions去申请权限,根据onRequestPermissionsResult返回的结果来写结果文件。
提示:23版本的在demo运行的时候,可能会弹权限提示框。
附上一个简单的流程图:
3.4结果输出
根据权限列表,可以给出在某一机型上实际的权限结果。
比如:
通过权限检查,在机型A上得出了如下结果:
机型:A
固件版本:*
权限检查情况:
根据上面的权限和功能的梳理,我们得出弹窗、快捷方式对应的功能
在结合Xposed屏蔽权限后的测试结果
综合以上这些,基本可以评估业务在该机型上的表现结果了。
本章完~