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

Android6.0权限管理

2015-11-08 21:50 281 查看
一、运行时权限

新系统区别于旧系统对待权限上面更加地考虑用户。旧系统的权限仅在安装时候询问一次,而在6.0中,app不得不在运行时一个一个询问用户授予权限。然后有两个很坑爹的事情,需要开发者在开发app的逻辑上面有所转变。一、权限询问对话框需要开发者自己调用;二、用户可以拒绝权限,并且随时可以在设置中取消已经授权的权限(这样很容易导致崩溃)。
如果低于6.0的系统,用户取消app需要的权限,将不会抛出异常,但是app将啥都不干,导致函数返回值为null或者是0...额所以还是有可能崩溃。

二、几类权限的比较

1、PROTECTION_NORMAL类权限。
这类权限只在安装时候要求用户授权,一旦授权就不可以取消。因此这类依旧在AndroidMainfest里面声明。

2、新运行时权限。
版本compileSdkVersion和targetSdkVersion为23。
写方法去检查你要的权限是否还是被授予,如果没有,则弹框请求用户授予。记得要去处理用户拒绝授权的情况。目前这类权限还不多,分为9大组

CALENDAR,读写日历

CAMERA,相机
CONTACTS,读写通讯录
LOCATION,定位
MICROPHONE,录音机
PHONE,通话相关

SENSORS,传感器
SMS,短信
STORAGE,存储

因此用过iOS的用户会越觉得发现这个跟iOS的权限系统是非常类似的。不过android的程序员要辛苦了!
这里还需要知道的是,同一个组的任何一个权限被授权了,其他权限也被自动授权。

3、如何写代码?
Activity中有个方法,checkSelfPermission(你需要确认的权限),返回值是int类型,如果不等于PackageManager.PERMISSION_GRANTED,则需要调用shouldShowRequestPermissionRationale方法。返回false,表示用户不希望提醒授权请求,在这里可以去建议用户授权。返回true,可以直接调用requestPermissions方法去获取权限。请求权限后,会回调onRequestPermissionsResult方法,通过参数通知请求的结果。

三、用兼容库使代码兼容旧版

使用v4兼容库。

ContextCompat.checkSelfPermisson(),返回PERMISSION_GRANTED表示授权,返回PERMISSION_DENIED表示拒绝
ActivityCompat.requestPermissions(),请求权限
ActivityCompat.shouldShowRequestPermissionRationale(),在M版本之前调用永远返回false

四、最后几点建议

着手准备重构
判断清楚权限没有授权导致的情形并做相应的处理
如果工程代码还没准备好,请不要设置targetSdkVersion为23
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: