Android 6.0 棉花糖,app将不会在安装的时候授予权限,取而代之的是,app不得不在运行时一个一个询问用户授予权限。
|
|
如果 app/build.gradle 里的 targetSdkVersion 是23的话,在6.0上运行一些权限,没有做处理,会直接崩溃:
如果 targetSdkVersion 22,就不会发生这样的错误,下面就来实践下这个 Android 6.0运行的权限:
单个权限
效果预览
这里以通讯录示例,按照惯例,先上效果图:
说明:第一次请求授权,是没有“不再询问”,拒绝后,再次请求授权,就会出现“不再询问”。
AndroidManifest.xml
|
|
如果没有注册权限,授权时直接返回拒绝,并没有报错。
代码调用
在需要使用到权限之前调用以下方法:
checkSelfPermission:检查权限
requestPermissions:请求权限
shouldShowRequestPermissionRationale:判断用户是否拒绝过
授权回调
不管是允许或拒绝,都会回调:
多个权限
如果同时请求多个权限,那应该怎么写呢?这里以通讯录和定位权限示例:
效果预览
AndroidManifest.xml
|
|
注册权限,不用多说了。
代码调用
在需要使用到权限之前调用requestContactsLocation方法:
权限分组
权限那么多,如果一个个判断,岂不是会疯掉,如图:
这里总共有九大组,同一组的任何一个权限被授权了,其他权限也自动被授权。例如,一旦WRITE_CONTACTS被授权了,app也有READ_CONTACTS和GET_ACCOUNTS了。
简单封装
写在基类:
这里新建了接口onPermissionCallbackListener,为了回调方便:
在需要使用到权限之前调用requestRuntimePermission方法,如通讯录权限:
其他权限调用示例:
源码
参考
更新日志
- 2017.03.04 修改
- 2016.02.04 撰写