基础知识

Android 10、11 存储适配总结

2021-07-22  本文已影响0人  码农ing

作者:fishforest

链接:https://www.jianshu.com/p/d5573e312bb8

先来看看存储区域划分

1、分区存储原理

1、App访问自身内部存储空间、访问外部存储空间-App私有目录不需要任何权限(这个与Android 10.0之前一致)

2、外部存储空间-共享存储空间、外部存储空间-其它目录 App无法通过路径直接访问,不能新建、删除、修改目录/文件等

3、外部存储空间-共享存储空间、外部存储空间-其它目录 需要通过Uri访问

分区存储的变更在于第二点、第三点。

2、Android 10.0 存储访问方式变更地方在于

自带外部存储-共享存储空间和自带外部存储-其它目录

以上两个地方不能通过路径直接访问文件,而是需要通过Uri访问。

3、Android 10/11 存储适配建议

通过分析Android 10/11存储适配方式,了解到了不同的系统需要如何进行适配,此时就需要一个统一的适配方案了。

适配核心

分区存储是核心,App自身产生的文件应该存放在自己的目录下:

/sdcard/Android/data/packagename/ 和/data/data/packagename/

这两个目录本App无需申请访问权限即可申请,其它App无法访问本App的目录。

适配共享存储

共享存储空间里的文件需要通过Uri构造输入输出流访问,Uri获取方式有两种:MediaStore和SAF。

适配其它目录

在Android 11上需要申请访问所有文件的权限。

具体做法

第一步

在AndroidManifest.xml里添加如下字段:

权限声明:

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permissionandroid: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 权限。

上一篇下一篇

猜你喜欢

热点阅读