参考文章:Android 存储基础
Android 10、11 存储完全适配(上)
Android 10、11 存储完全适配(下)
小记:
image.png适配核心
分区存储是核心,App自身产生的文件应该存放在自己的目录下。这两个目录本App无需申请访问权限即可访问,其它App无法访问本App的目录。
/sdcard/Android/data/packagename/
App自身的自带外部存储-私有目录/data/data/packagename/
App自身的内部存储
适配共享存储
共享存储空间里的文件需要通过Uri
构造输入输出流访问。Uri
获取方式有两种:MediaStore
和SAF
适配其它目录
在Android 11
上需要申请访问所有文件的权限。
具体做法
第一步
- 在
AndroidManifest.xml
里添加如下字段:权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- 在
<application/>
标签下添加如下字段:
android:requestLegacyExternalStorage="true"
第二步
如果需要访问共享存储空间,则判断运行设备版本是否大于等于 ·Android6.0·。
- 若是则需要申请
WRITE_EXTERNAL_STORAGE
权限。拿到权限后,通过Uri
访问共享存储空间里的文件。 - 如果需要访问其它目录,则通过
SAF
访问
第三步
如果想要做文件管理器、病毒扫描管理器等功能。则判断运行设备版本是否大于等于 Android 6.0
,若是则需要先申请普通的动态存储权限。若运行设备版本为Android 10.0
,则可以直接通过路径访问/sdcard/
目录下文件(因为禁用了分区存储);若运行设备版本为Android 11.0
,则需要申请MANAGE_EXTERNAL_STORAGE
权限。
网友评论