Android 11分区存储
从Android Q开始,引入了分区存储,它改变了应用对外部存储设备中的文件访问方式,将共享存储划分为特定的集合,并限制访问更广泛的存储空间。分区存储使用户更好的控制自己的文件,增强了隐私保护,也避免了垃圾文件的产生。虽然目前谷歌提供了兼容方案,使应用避免了分区存储的问题,但是现在Android 11上targetSdkVersion为30的应用已强制执行分区存储,在Android下个系统版本也将全面执行分区存储,所以建议应用提前完成适配、数据迁移等工作。
存储空间分为内部存储和外部存储,分区存储更改了外部存储的存储方式。重新划分了外部存储的共享存储区域,划分为image和video、audio、下载空间,并为单个应用提供具有沙盒结构的专用目录进行存储。
同时改变了应用对外部存储的文件访问方式,加强了对文件属性的管理。
-应用可以读写分配给自己的存储空间,无需权限。
-应用间的存储空间被沙盒化和隔离,应用无法访问其他应用目录存储空间。
-应用可以使用getExternalFilesDirs()获得外部存储上自己应用的专用目录。
-新添加的image、video、audio和下载空间是共享存储空间,应用可以按文件类型在共享存储空间添加文件,并且不需要任何权限。
-如果访问共享存储空间中其他应用创建的媒体文件时,需要READ_MEDIA_IMAGE、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO权限。没有写权限。
-要访问下载空间或无组织的文档中其他应用创建的文件,用户必须通过文档选取器给予特定的访问权限。
-如需创建或者访问外部存储中的image、audio、video需要使用MediaStore API。系统会自动扫描外部存储,并将媒体文件按照类型添加到对应的MediaStore.Images、MediaStore.Audio、MediaStore.Video集合中。
分区存储具体实现方式,请参考Android 官网:
分区存储:https://developer.android.google.cn/about/versions/11/privacy/storage
MediaStore:https://developer.android.google.cn/reference/android/provider/MediaStore
存储访问框架:https://developer.android.google.cn/guide/topics/providers/document-provider