美文网首页基础知识
Android 10、11 存储适配总结

Android 10、11 存储适配总结

作者: 码农ing | 来源:发表于2021-07-22 10:58 被阅读0次

    作者: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 权限。

    相关文章

      网友评论

        本文标题:Android 10、11 存储适配总结

        本文链接:https://www.haomeiwen.com/subject/eosemltx.html