背景原因
Android 10(API 級別 29)引入了多項功能和行爲變更,目的是更好地保護用戶的隱私權。具體變更請跳轉:https://developer.android.google.cn/about/versions/10/privacy/changes
android Q 規定了APP有兩種外部存儲空間視圖模式:Legacy View
、Filtered View
。採用了新的分區儲存權限,老的存儲權限READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE
廢棄,替換成新的存儲權限android.permission.READ_MEDIA_AUDIO
、android.permission.READ_MEDIA_IMAGES
和android.permission.READ_MEDIA_VIDEO
,並且只提供了多媒體文件的讀權限,未提供寫權限,現在應用沒有權限直接刪除別的應用生成的任何文件,包括多媒體文件。
解決方案
- 自降版本
compileSdkVersion <= 27
(當然這個不建議,畢竟要跟隨潮流) - 在清單文件
AndroidManifest.xml
中添加 :android:requestLegacyExternalStorage="true"
(指定分區按照以前的模式,也不是長久處理方式) - 使用
FileProvider
的Content Uri
替換File Uri
可以參考:
華爲:Google Q版本應用兼容性整改指導
OPPO:Android Q版本應用兼容性適配指導
郭霖:Android 10適配要點,作用域存儲