-
Android 10 对外部存储权限行为https://developer.android.google.cn/training/data-storage#scoped-storage
-
请求 (READ_EXTERNAL_STORAGE) 存储权限https://developer.android.google.cn/reference/android/Manifest.permission#READ_EXTERNAL_STORAGE
-
它所属的文件https://developer.android.google.cn/training/data-storage/app-specific
-
存储访问框架 (Storage Access Framework)https://developer.android.google.cn/guide/topics/providers/document-provider
改进媒体存储
Android 10 中要求所有应用都使用 MediaStore API 来访问照片、视频和音乐文件,我们也将继续秉承这个原则。但是我们也知道,很多深度依赖基于原始文件路径 API 的应用和第三方库是很难切换到使用文件描述符 (File Descriptor) 的。因此在 Android 11 里,依赖原始文件路径的 API 和库可以再次使用了。您需要在
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
应用的 Manifest 文件里添加 requestLegacyExternalStorage 属性,以保证 Android 10 的用户也可以使用该特性。在实际的运行中,依赖原始文件路径的 I/O 请求会被重定向到使用 MediaStore API,当使用这种方式访问本应用存储空间之外的文件时,这次重定向会造成性能影响。而且直接使用原始文件路径,并不会比使用 MediaStore API 有更多优势,因此我们强烈建议直接使用 MediaStore API。在 Android 10 中,应用在对每一个文件请求编辑或删除时都必须得到用户的确认。而在 Android 11 中,应用可以一次请求修改或者删除多个媒体文件。系统的默认图库应用 (Gallery) 将不再展示这些对话框。我们希望这项改进能够使用户体验更加顺畅。
-
可以再次使用https://developer.android.google.cn/preview/privacy/storage#media-files-raw-paths
-
修改或者删除多个媒体文件https://developer.android.com/preview/privacy/storage#media-file-access
对 Storage Access Framework 的更新
当我们对广泛的存储访问进行限制后,一些开发者试图使用 Storage Access Framework (SAF) 遍历整个文件系统。但是,SAF 并不适用于广泛地访问共享存储内容。因此,我们对其进行了更新,限制了它对某些路径的可见性。
在 Android 11 中,将不再允许用户授权访问 Downloads 的根目录、每个可用 SD 卡的根目录以及其它应用的目录。应用仍然可以通过 Storage Access Framework API 或者文件选择器来帮助用户从共享存储中选取个别文件。
- 对其进行了更新
https://developer.android.google.cn/preview/privacy/storage#file-directory-restrictions
针对文件管理应用的特殊权限
针对文件管理器以及一些备份类的应用,它们需要获得共享存储的更广泛的访问权限。Android 11 里将会引入一个特别的权限叫做 MANAGE_EXTERNAL_STORAGE,该权限将授权读写所有共享存储内容,这也将同时包含非媒体类型的文件。但是获得这个权限的应用还是无法访问其他应用的应用专属目录 (app-specific directory),无论是外部存储还是内部存储。
我们希望继续允许一些确实有广泛访问外部存储文件需求的应用。在 Android 11 中,已获得MANAGE_EXTERNAL_STORAGE 权限的应用,可以将用户引导至系统设置页面,让用户选择是否允许该应用 “访问所有文件” (All Files Access)。下面的两种应用示例是可以使用该权限的:
-
文件管理器 —— 该类应用的主要功能是管理文件;
-
备份和恢复 —— 该类应用需要访问大批量的文件 (比如切换设备的时候进行数据迁移,或者将数据备份到云端)。
如果您的应用需要访问单个文件,比如文字处理应用,则应该使用 Storage Access Framework (SAF)。
如果您的应用需要 MANAGE_EXTERNAL_STORAGE 权限或者调用了依赖原始文件路径的 API,那么您必须在 AndroidManifest 文件中添加 requestLegacyExternalStorage=true,这样您的应用才能够在搭载 Android 10 的设备上正常运行。更多相关信息请查看我们在去年 Android 开发者峰会的分享视频《准备好使用分区存储》:
- 腾讯视频链接
https://v.qq.com/x/page/d3026c1bpr3.html
- Bilibili 视频链接