Android开发 Android10及10+读取外部存储问题

发布于:2025-07-03 ⋅ 阅读:(28) ⋅ 点赞:(0)

前提 : 在做文件遍历时,有的文件在Android10+无法访问,在注册清单下添加android:requestLegacyExternalStorage="true"后可正常访问,但一直不知道具体原因。
使用XXPermissions时读到Android10分区存储后才明白这里的逻辑。

1 概述

Android10使用了分区存储机制,详细内容可参考Android 10 分区存储完全解析,写得十分详细。

简单描述即:分区存储就是对外部存储(sdcard,/storage/emulated/0下的公共目录)进行重新设计,App对外部共享文件的访问需要通过 MediaStrore API 和 Storage Access Framework 来访问;而外部私有文件角度看则无法读写自己应用以外创建的其他文件。
内部私有存储文件(/data/data/packagename/)未进行变更
在这里插入图片描述

2 使用

目前我的做法(参考XXPermissions):
Android10及以下

  • 在 manifest 中设置 requestLegacyExternalStorage 属性为 true
  • 申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE
    Android10+
  • 在 manifest 中设置 requestLegacyExternalStorage 属性为 true
  • 申请MANAGE_EXTERNAL_STORAGE 权限

2.1 兼容使用

Target 小于等于 Android 9(API 28)
Target 大于等于 Android 10 (API 29),在 manifest 中设置 requestLegacyExternalStorage 属性为 true

<manifest ... >
 <!-- This attribute is "false" by default on apps targeting
      Android 10 or higher. -->
   <application android:requestLegacyExternalStorage="true" ... >
     ...
   </application>
</manifest>

2.2 分区存储

后续更新,可先参考https://www.jianshu.com/p/af9903069ebe

文章参考
https://github.com/getActivity/XXPermissions
https://blog.csdn.net/wanliguodu/article/details/120297395
https://www.jianshu.com/p/af9903069ebe


网站公告

今日签到

点亮在社区的每一天
去签到