Android M运行时权限实战解析

需积分: 4 3 下载量 166 浏览量 更新于2024-07-20 收藏 4.71MB PPTX 举报
"对Android Marshmallow (也称Android M) 的技术分析,主要关注Runtime Permission(运行时权限)的改变和其对应用开发的影响。" 在Android M中,最大的变动之一是对权限管理系统的改革,引入了Runtime Permissions的概念。在此之前,Android系统在安装应用时一次性授予所有危险级别(Protection level为dangerous)的权限,而Android M开始,对于这些敏感权限的处理方式发生了变化,以提高用户对应用权限使用的控制权。 1. **Runtime Permissions的流程**: - 当应用需要使用如相机、位置信息等危险权限时,系统会在首次使用该功能时弹出权限请求对话框,而不是在安装时。 - 如果用户拒绝某个权限,应用可能无法正常运行某些功能,比如拒绝相机权限后,应用无法开启相机。 - 用户可以在应用设置中随时开启或关闭这些权限,提供了更灵活的权限管理。 2. **API级别的影响**: - API level <= 22的应用在安装时仍然会自动获取所有危险权限,但用户可以在设置中手动关闭。 - API level >= 23的应用必须在运行时通过`requestPermissions()`方法请求权限,如果用户未授权,相关功能将受限。 3. **兼容性问题**: - 对于预置应用,即使目标API级别设为23,安装时也会得到所有权限,但用户依然可以关闭。 - 这个改变导致应用开发者需要考虑不同API级别的兼容性,可能需要为不同版本的Android提供不同的版本。 - 应用下载中心需要防止SDK level 23的应用被Android 5.1或更低版本的设备下载,否则安装将失败。 4. **Service, BroadcastReceiver, Content Provider的权限请求**: - 这些非Activity组件没有`requestPermissions()`接口,因此无法直接请求权限。开发者需要在启动这些组件前确保所需权限已经得到用户许可,或者在需要权限的Activity中请求并处理权限。 5. **Headless Applications和Package的权限获取**: - 无界面的应用或包需要权限的情况,开发者需要采用特殊策略,如通过绑定到有界面的组件来请求权限。 6. **预置应用的要求**: - 预置应用只要使用到危险权限,其target API级别就必须设为23,以遵循新的权限管理规则。 Android M的Runtime Permissions机制增加了用户对应用权限使用的透明度,但同时也对开发者提出了新的挑战,需要他们在设计和实现应用时充分考虑到权限管理,以确保应用在不同Android版本上的兼容性和用户体验。开发者需要编写代码来检查和处理权限状态,并提供良好的用户体验,即使在用户拒绝某些权限时。同时,应用商店和更新策略也需要适应这种变化,以便正确地向用户推送适合他们设备的版本。