官方对权限的解释
Android 安全架构的中心设计点是:在默认情况下任何应用都没有权限执行对其他应用、操作系统或用户有不利影响的任何操作。这包括读取或写入用户的私有数据(例如联系人或电子邮件)、读取或写入其他应用程序的文件、执行网络访问、使设备保持唤醒状态等。由于每个 Android 应用都是在进程沙盒中运行,因此应用必须显式共享资源和数据。它们的方法是声明需要哪些权限来获取基本沙盒未提供的额外功能。应用以静态方式声明它们需要的权限,然后 Android 系统提示用户同意。应用沙盒不依赖用于开发应用的技术。特别是,Dalvik VM 不是安全边界,任何应用都可运行原生代码(请参阅 [Android NDK](https://developer.android.google.cn/tools/sdk/ndk/index.html))。各类应用 — Java、原生和混合 — 以同样的方式放在沙盒中,彼此采用相同程度的安全防护。
变更权限规则的版本:4.4 – 5.0 – 6.0
- 在 4.4 系统上,只要开发者在 manifest 里面申请对应的权限,apk 在安装到手机上后,都会弹出权限列表展示给用户该 app 将要获取到哪些权限, 只要用户同意了安装这些权限就会自动被授予给 app.
- 5.0 系统对权限的处理与 4.4 基本没有差别,但一些第三方厂商的 rom 在应用管理中提供可关闭权限的开关,这样做就造成了很大的适配困扰, 等下后面再讲.
- 6.0 以上的系统在处理申请权限时, 会弹出 dialog 来询问用户是否授予该权限,除了同意和拒绝 dialog 还会提供不再询问这个选项.
- 这个改动导致在
6.0
之后,要让用户得到最佳体验,应该在申请权限的时候弹出窗体具体说明为何需要该权限。 -
在 Android 6.0 以上主动申请权限时,谷歌的官方文档和视频给出了最佳实践 :
用户如果勾选了不再询问选项,则后续申请该权限时将不再弹出对话框,如果用户拒绝过该权限的申请但没有勾选不再询问,那么 ActivityCompat.shouldShowRequestPermissionRationale() 将返回 true, 开发者可在此时展示一个界面来介绍为何应用需要使用该权限, 来争取用户授予权限