最近几天测试说我们的app在6.0的机型上经常崩溃,发现是6.0新的运行时权限的问题,这里给大家分享下我们适配6.0运行时权限的方案
6.0之前的权限模型
- 在
AndroidManifest
中声明可能用到的所有权限 - 用户在安装时,系统展示所有权限,用户安装即授予所有权限,取消则拒绝安装
6.0新的运行时权限
- 将权限分为一般权限和危险权限两种,一般权限跟以前一样在
AndroidManifest
声明,危险权限需要开发者在代码中手动的动态申请 - 动态申请权限,系统弹出对话框,用户可点击确定或拒绝,系统提供用户的选择回调,从而开发者处理相应的逻辑
- 用户可以选择拒绝并不再提醒
运行时权限分类
- 危险权限
危险权限即需要动态申请的权限,一共9组,取得一组中某一个权限的授权,则自动拥有该组的所有授权
身体传感器
日历
摄像头
通讯录
地理位置
麦克风
电话
短信
存储空间
具体为:
- 一般权限
除上面的危险权限之外的权限即为一般权限(普通权限)
暂时不做运行时权限适配的方案(不推荐)
如果暂时还不想适配6.0运行时权限,但是又想要app可以在6.0及以上机型运行,那我们可以将目标版本改为23以下,如:targetSdkVersion 22
,这样做的效果:
- 不管是6.0以下还是以上的机型都可以运行,跟之前一样权限在安装时一次性授予
- 由于6.0机型在设置中可以进行权限管理,用户可以取消该应用的某个权限,但是app并不知道该权限被取消,此时app会崩溃(合理的try可以避免)