Android 10的ScopedStorage(分区存储)的介绍
.
Scoped Storage的由来
Android长久以来都支持外置存储空间这个功能,也就是我们常说的SD卡存储。这个功能使用得极其广泛,几乎所以开发者在开发的时都喜欢在SD卡的根目录下建立一个自己应用的专属的目录,用来存放各类文件和数据。导致SD卡的文件管理变的异常混乱。而且用户即使我卸载了一个完全不再使用的程序,它所产生的垃圾文件却可能会一直保留在我的手机上,不会被自动删除,这就使用户的存储空间一直处于十分紧张的状态,还浪费了大量的存储资源。
为了解决上述问题,Google 在Android 10当中加入了Scoped Storage分区存储机制。
.
.
简介
.
介绍:
为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储空间的分区访问权限(即分区存储)。此类应用只能看到本应用专有的目录(通过
context.getExternalFilesDir()
访问)以及本应用所创建的特定类型的媒体文件。如果你的应用不符合该条件的会以兼容模式运行,兼容模式跟以前一样,根据路径可以直接存储文件。但很有可能随着SDK的更新而无法使用,所以建议尽早完成Scoped Storage 的适配。
说明:
分区存储(Scoped Storage)机制,是一种安全机制,用于防止应用读取其他应用的数据;并具有以下特点:
每个应用程序都有自己的存储空间,即 应用专属目录
应用程序不能翻过自己的目录,去访问公共目录
应用程序请求的数据都要通过权限检测,不符合要求不会被放行
使用 MediaStore 相关API可以让你访问共享的存储空间
注意:
通过
android:requestLegacyExternalStorage="true"
设置兼容模式,在Android 11中以上配置依然有效,但仅限于targetSdkVersion
小于或等于29的情况。如果你的targetSdkVersion >=30
,Scoped Storage就会被强制启用,android:requestLegacyExternalStorage="true"
标记将会被忽略。
.
.
Scoped Storage权限的介绍
介绍:
默认情况下,对于
targetSdkVersion >= 29
的应用,其访问权限范围限定为Scoped Storage。此应用无需请求与存储相关的用户权限,即可以查看外部存储中以下类型的文件:<
应用外部特定目录中的文件(使用
getExternalFilesDir()
访问)应用自己创建的照片、视频和音频(通过
MediaStore
访问)