1、运行时权限:Android 6.0(API 级别 23)引入了运行时权限机制,这是为了应对应用在安装时一次性请求所有权限可能导致的隐私问题,与之前的安装时权限不同,运行时权限允许用户在应用运行时动态地授予或拒绝权限。
2、权限分类:Android系统将权限分为普通权限和危险权限,普通权限如访问网络状态、读取手机状态等,这些权限对用户的隐私和数据安全影响较小,系统会自动授予,无需用户确认,而危险权限如访问通讯录、发送短信、读取位置信息等,则需要用户手动授权。
3、权限请求流程:当应用需要使用某项危险权限时,系统会首先检查该权限是否已经被授予,如果未被授予,系统会弹出权限请求对话框,用户可以选择授权或拒绝,应用需要在运行时进行权限检查,并处理用户的授权结果。
4、权限状态检查:应用在请求权限之前,必须检查当前权限是否已经被授予,这可以通过ContextCompat.checkSelfPermission()
方法来实现。
5、请求权限:如果检查到权限没有授予,应用可以通过ActivityCompat.requestPermissions()
方法请求权限。
6、处理权限请求结果:系统会根据用户的选择返回请求结果,开发者需要在onRequestPermissionsResult()
方法中处理这个结果,并根据授权情况决定是否继续执行操作。
7、分区存储模式:Android 11(API 30)及以后版本进一步加强了权限管理,引入了新的分区存储模式(Scoped Storage),这意味着应用对设备存储的访问更加严格,无法直接访问整个文件系统,而只能访问特定的目录。
权限类型 | 描述 | 示例 |
普通权限 | 不涉及用户隐私和数据安全的权限,系统自动授予 | 访问网络状态、读取手机状态 |
危险权限 | 涉及用户隐私和数据安全的权限,需要用户手动授权 | 访问通讯录、发送短信、读取位置信息 |
1、问:为什么Android 6.0要引入运行时权限机制?
答:Android 6.0引入运行时权限机制主要是为了增强用户隐私和数据安全的保护,在之前的权限模型中,应用在安装时会列出所有需要的权限,用户只能选择同意或拒绝,这导致了一些不必要的权限也可能被一并授予,而运行时权限机制允许用户在应用运行时动态地授予或拒绝权限,从而提供了更细粒度的权限控制。
2、问:如何处理用户拒绝授予权限的情况?
答:当用户拒绝授予某项权限时,开发者应该合理处理这种情况,例如提供用户友好的提示信息,解释该权限对于应用功能的必要性,并引导用户去设置中手动开启该权限,也应该确保应用在没有该权限的情况下能够正常运行或提供替代功能。