关于动态权限申请的一点总结

来源:互联网 发布:latex windows 编辑:程序博客网 时间:2024/06/10 06:41
 以下是自己在工作过程中关于动态权限的一点总结:
 1、dangerous权限用到的时候,一定要申请。虽然目前Android碎片化严重,有些dangerous权限比如在小米手机,在进行版本更新的时候,下载Apk到SD卡上面,但是你没申请SD卡权限,此时也不会闪退,只是没法下载了。但是,有些dangerous权限,你不申请就使用了,那绝比会闪退的。
 2、有些手机的系统,会主动申请获取WRITE_SETTINGS(修改系统设置权限),例如小米手机,这样你的App会自动获取一些权限。但是,如果用户拒绝给你WRITE_SETTINGS权限,而此时你又没主动申请相关的dangerous权限,那么你的App就会出现闪退现象。虽然WRITE_SETTINGS不是dangerous权限组,也应该主动去向用户申请,并告知厉害。
 3、在Android6.0及以后,WRITE_SETTINGS权限的保护等级已经由原来的dangerous升级为signature,这意味着我们的APP需要用系统签名或者成为系统预装软件才能够申请此权限,并且还需要提示用户跳转到修改系统的设置界面去授予此权限。也就是说,要想申请该权限,apk必须要打包,签名打包。要签名打包,最喜欢的debug模式是不能申请该权限。
 4、动态权限机制应用的前提是:targetVersion>=23,且App运行在6.0及以上的机型上,系统就会采用动态权限机制,否则,采用之前的权限机制。
 5、一个权限申请被授权,则同一个权限组的所有权限都被授权了。系统弹出的授权提示框是对权限组的说明,而不是只针对某个权限。
 6、所有用到的dangerous权限一定要在Manifest中声明。否则,申请时会不提示用户,直接回调给开发者权限被拒绝了。
 7、对于SD卡权限,如果你下载的东西是存放在App的私有目录(Android/data/项目包名/...),则可以不申请SD权限。否则,需要申请。
 8、建议:
 a)如果使用动态权限机制,用到的时候,一定要进行申请,否则会抛出异常导致闪退的。
 b)如果不使用动态权限机制,把targetVersion设置为<=22即可。
 c)对于已经使用了动态权限的并且已经发布的App,,就不要再降低targetVersion了,否则,你的App会安装失败。