首先安利一个大家都知道的事情,Google推出了中文版Android开发文档。
说到权限变化大家马上就想到Android API23(6.0)之后权限系统大改。当build.gradle
中targetSdkVersion
设置小于23时,会继续引用旧版本权限管理机制,当targetSdkVersion
大于等于23时,则会使用新的权限管理。
targetSdkVersion < 23
当targetSdkVersion
小于23时,你的项目会继续使用旧版本的权限机制:
- 用户在安装时获取到所有权限,在使用权限时无需进行预判断。
- 虽然使用旧版的权限机制,但是在
设置-App详情
中也可以找到权限管理将其关闭。如果用户手动来到设置将权限关闭,我们的项目在用到该权限时会发生Crash,所以如果使用低版本权限管理,请将需要用到权限的地方try-catch
起来。 - 那些低版本权限提示弹窗都是手机厂商自定义的。他们拥有系统权限,在检测到你的App使用权限时会提示用户权限授权,如果用户拒绝则替用户到设置中心关闭权限。
- 综上,不想使用最新的权限管理,则将
targetSdkVersion
设置为小于23即可,并且将用到权限的代码try-catch
起来。这里需要知道不是所有的权限都可以关闭的,只有涉及用户隐私的权限才会在设置中展示出来,方便用户进行手动关闭。
targetSdkVersion >= 23
- 将权限分为了
普通权限
和隐私权限
,普通权限在清单文件中声明则直接获取。隐私权限也需要在清单文件中声明,但是在安装完成后,所有的隐私权限都为拒绝状态,需要在用到隐私权限时判断权限是否开启,否则项目直接发生Crash。 - 第一次使用隐私权限时直接弹出系统的权限授权弹窗,用户授权则永久授权,拒绝则无法使用此权限。第二次或者之后用到此权限我们需要做一个自己的弹窗来描述该权限的作用,然后关闭我们自己的弹窗后会弹出系统的权限授权弹窗,此时弹窗上会有不再提醒的提示文字,如果用户勾选了不再提醒则再也不会提醒并且权限关闭。
- 检测权限关闭并且勾选了不再提醒我们可以提示用户到设置中心中手动打开权限。用户如果打开则永久授权(当然还是可以再关闭的)。
- 权限组的概念也需要知道,比如获取写文件权限时,用户授权则会同时获取读文件的权限,因为他们属于同一个权限组。
- 综上,新版本权限的适配也很简单,主要工作是在所有用到隐私权限的地方添加权限是否授权的判断、后续的一些判断细节以及回调。Google写的权限工具easypermissions是我在权限改版时用的,还是非常好用的。demo可参考官方demo。
有任何问题请联系mengyuanzz@126.com