版权声明:本文为博主原创文章,未经博主允许不得转载
文章分类:Android知识体系 - 版本适配
一、前言
本文主要是从官方文档中筛选出一些常见的适配项,若有任何纰漏或需要补充的,欢迎大家在评论区指出。
二、版本适配
1. 运行时权限授予优化
Android 8.0 及以上系统对运行时权限的授予进行了优化,以下是官方文档的原文:
在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。
对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。
例如,假设某个应用在其清单中列出READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
。应用请求READ_EXTERNAL_STORAGE
,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予WRITE_EXTERNAL_STORAGE
,因为该权限也属于同一STORAGE
权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予READ_EXTERNAL_STORAGE
;不过,如果该应用后来又请求WRITE_EXTERNAL_STORAGE
,则系统会立即授予该权限,而不会提示用户。
也就是说,我们的应用在 Android 8.0 之前,如果在权限注册清单中列出 READ_EXTERNAL_STORAGE
和 WRITE_EXTERNAL_STORAGE
权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
那么在动态获取 READ_EXTERNAL_STORAGE
权限之后,直接使用 WRITE_EXTERNAL_STORAGE
权限相关的操作时并不会出现任何问题,因为系统已经将同一权限组并且出现在清单中的其他权限都一并授予给了我们。
但这一行为在 Android 8.0 及以上版本的系统中就会出现问题,系统会抛出缺失权限相关的异常。因此,我们在使用 WRITE_EXTERNAL_STORAGE
权限相关的操作之前需要再次动态向系统申请权限,然后系统会自动将权限授予给我们(由于我们之前已经获取了同一权限组中的其他权限,因此不需要再次弹出窗口让用户确认)。
有关权限组更多的介绍请至官方的权限说明文档,以下是从文档中截取的关于权限分组的表格:
2. 安装未知来源应用
参考资料:Making it safer to get apps on Android O
在 Android 8.0 之前的系统,用户若从官方应用商店之外的来源安装应用时