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
新系统区别于旧系统对待权限上面更加地考虑用户。旧系统的权限仅在安装时候询问一次,而在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
相关文章推荐
- Android TextView跑马灯
- android顶部导航栏的封装
- Android Studio使用Github托管代码
- android获取string.xml的值
- android中的数据库操作
- apk反编译
- Android 系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)
- ANDROID自定义视图——onMeasure流程,MeasureSpec详解
- Android读书笔记-----自定义View(2)实现
- Android Camera 使用小结
- Android 学习笔记之常用控件
- Android 学习笔记之常用控件
- 创建库并上传至私有Maven
- activity之间的跳转与数据传递
- CoordinatorLayout简述
- android86 监听SD卡状态,勒索软件,监听应用的安装、卸载、更新,无序广播有序广播
- Fragment的addSharedElement方法简述
- 获取Android设备挂载的所有存储器
- 使用 RxAndroid 处理异步任务
- Favor库简述