前提 : 在做文件遍歷時,有的文件在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