返回
]> Android Q & Android 11存储适配(一) 基础知识点梳理
Android
2024-02-17 02:41:03
技术的前沿:Android Q & Android 11 存储适配解析(一)
<[#title]>
Android Q & Android 11存储适配(一) 基础知识点梳理
</#title]>
Android 存储适配梳理
Android 存储适配是什么?
Android 存储适配是指 Android Q 及以后版本中,对文件访问进行的权限管理机制,旨在进一步加强对用户隐私数据的保护。
存储适配为什么要调整?
用户体验差
应用可以任意访问用户所有照片、音乐、视频文件,会导致一些应用可能访问到用户不想被访问的数据。
存在安全风险
存在安全风险,应用可以窃取用户敏感信息,使用户隐私泄露。
侵占用户存储空间
应用可以随意下载文件保存到用户手机上,侵占用户存储空间。
Android 11 的存储适配机制是什么?
存储分组
基于 Android Q 构建了分级的存储模型。将文件大致分为三大类:照片、视频、音频。
权限管理
对三大类文件,赋予了不同的访问权限。想要访问这些文件,需要分别获取访问权限。
访问回调
如果应用需要访问文件,首先需要判断自己是否拥有访问权限,如果拥有,则可以直接访问;否则需要向用户申请权限。如果用户同意,则授予应用权限;如果用户拒绝,则应用无法访问该文件。
存储变更内容及适配重点
系统存储变更
取消访问 ALL_FILES 权限
原有针对所有类型文件的访问权限 ALL_FILES 权限已被取消。
新增 MediaStore.Images、MediaStore.Audio 和 MediaStore.Video 三个表
增加了三个只读表,应用可以通过它们读取特定的媒体文件(分别对应照片、音频和视频文件)。
文件访问权限控制
Android Q 引入的 scoped storage 将应用对文件存储的访问权限划分为三大类,分别是图片、音频和视频。
应用存储适配指南
申请读取权限
- 申请读取权限:应用需要在清单文件中申请读取文件权限,如访问照片,需要申请 READ_EXTERNAL_STORAGE 权限。
- 检查权限:应用在访问文件前需要检查是否已经拥有读取权限。
- 显示读取权限申请对话框:如果应用没有读取权限,需要向用户显示读取权限申请对话框,用户同意后才能读取文件。
存储操作适配
- 使用 MediaStore API:应用需要使用 MediaStore API 来读取文件,不能直接使用文件路径。
- 使用 URI 访问文件:应用需要使用 URI 来访问文件,而不是直接使用文件路径。
- 使用 FileProvider 共享文件:如果应用需要共享文件,需要使用 FileProvider 来共享,不能直接使用文件路径。
存储适配示例
// 判断应用是否有读取外部存储权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
// 如果有,直接读取文件
try {
// 读取文件
...
} catch (Exception e) {
e.printStackTrace();
}
} else {
// 如果没有,向用户申请读取权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_READ_EXTERNAL_STORAGE);
}