/storage/emulated/0/Android/data/包名
Android 10的分区存储特性,对Android系统的外部存储空间重新设计,外部存储被分为应用私有目录以及共享目录两个部分:
-
应用私有目录:存储应用私有数据,外部存储应用私有目录对应Android/data/包名
-
共享目录:存储其他应用可访问文件, 包含媒体文件、文档文件以及其他文件,对应设备DCIM、Pictures、Alarms, Music, Notifications,Podcasts, Ringtones、Movies、Download等目录。
2.2.1 应用私有空间
与以往相同的是,访问自身的外部存储下的应用私有空间是不需要任何权限的。与内部一样,也有一个目录专为应用的持久性文件而设计,和另一个目录包含应用的缓存文件。也是可以正常使用File相关api的,所以只要取得路径便可自由发挥。
需要注意的不同点是:开启了分区存储特性后,应用只能访问自身的私有空间,即使获得了存储权限,也无法访问其他应用的私有空间
另外与内部空间的区别是,外部存储空间可能被移除也可能有多个,所以返回的是一个数组,对于返回数组中的第一个元素被视为主外部存储卷。除非该卷已满或不可用,否则请使用该卷。
-
持久性文件:
getExternalFilesDirs(@NonNull Context context, @Nullable String type),type根据文件类型可传系统预定义的子目录常量,如图片Environment.DIRECTORY_PICTURES,此时返回/storage/emulated/0/Android/data/包名/files/Pictures。或者传null直接返回/storage/emulated/0/Android/data/包名/files -
缓存性文件:
ContextCompat.getExternalCacheDirs(context),/storage/emulated/0/Android/data/包名/cache
注意:卸载app后,系统会自动移除这些目录释放空间!!
=========================================================================
如果用户数据可供或应可供其他应用访问,并且即使在用户卸载应用后也可对其进行保存,请使用共享存储空间。
共享文件类型, 包含媒体文件、文档文件以及其他文件,对应设备DCIM、Pictures、Alarms, Music, Notifications,Podcasts, Ringtones、Movies、Download等目录。Android 分别提供用于获得该类型可共享数据文件Uri的 API:
-
媒体内容:可以使用
MediaStoreAPI 访问此内容 -
文档和其他文件:系统有一个特殊目录,用于包含其他文件类型,例如 PDF 文档和采用 EPUB 格式的图书。应用可以使用
Storage Access Framework访问这些文件。
对于共享文件,。以往可以通过data column获得路径,再使用File API来操作,现在都会返回失败。开启了分区存储特性之后,应用只能通过系统提供的api来向系统请求得到对应文件的Uri,并通过Uri生成FileDescriptor和InputStream等

本文介绍了Android 10及更高版本的分区存储特性,将外部存储分为应用私有空间和共享目录。应用私有空间仍可自由访问,但无法跨应用访问。MediaStore API成为访问共享目录的主要方式,无需额外权限访问自身创建的媒体文件,但访问其他应用媒体文件需存储权限。MediaStore的变化包括文件创建位置、权限管理以及Android 11的更新,如批处理操作和文件路径重定向。
最低0.47元/天 解锁文章
3202

被折叠的 条评论
为什么被折叠?



