其他分享
首页 > 其他分享> > Android 10,11 文件存储适配

Android 10,11 文件存储适配

作者:互联网

一:Android 11 (API 30)中的存储机制更新:

Android 11(API 级别 30)进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。此版本引入了多项增强功能,例如,可主动选择启用的媒体原始文件路径访问机制、面向媒体的批量编辑操作,以及存储访问框架的界面更新。

此版本还改进了分区存储,以便开发者更轻松地迁移到此存储模型。如需了解详情,请参阅 Android 存储用例和最佳做法指南,以及标题为 Android 11 存储常见问题解答的 Medium 文章。

强制执行分区存储

在 Android 11 上运行但以 Android 10(API 级别 29)为目标平台的应用仍可请求 requestLegacyExternalStorage 属性。应用可以利用此标记暂时停用与分区存储相关的变更,例如授予对不同目录和不同类型的媒体文件的访问权限。当您将应用更新为以 Android 11 为目标平台后,系统会忽略 requestLegacyExternalStorage 标记。

保持与 Android 10 的兼容性

如果应用在 Android 10 设备上运行时选择退出分区存储,建议您继续在应用的清单文件中将 requestLegacyExternalStorage 设为 true。这样,应用就可以在运行 Android 10 的设备上继续按预期运行。

将数据迁移到使用分区存储时可见的目录

如果您的应用使用旧版存储模型且之前以 Android 10 或更低版本为目标平台,您可能会将数据存储到启用分区存储模型后您的应用无法访问的目录中。在以 Android 11 为目标平台之前,请将数据迁移到与分区存储兼容的目录。

二:数据的迁移:

1.对于编译版本为API 29的应用来说:

如果以Android10为目标平台,需要在manifest清单中标记requestLegacyExternalStorage为true,这样可以停用分区存储,然后就能做迁移。(在Android 11会忽略该字段,强制开启分区存储,该字段也不怎么靠谱。)

2.对于编译版本为API 30的应用来说:

要想访问外部存储,需要在manifest清单中标记preserveLegacyExternalStorage 为true,这样在Android11的机器上覆盖安装时,才能访问旧版存储位置,才能去做迁移。(卸载重装会失效)

这里需要注意以下两点:

三:如何读写数据:

1.Android 数据结构:

使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限。

参考博客:

https://blog.csdn.net/weixin_40611659/article/details/108747227?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

标签:11,10,存储,适配,content,media,Android,Media,MediaStore
来源: https://blog.csdn.net/zw904448290/article/details/114316496