前提 : 在做文件遍历时,有的文件在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 targetingAndroid 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