android 10 以上 提出了分區(qū)概念,在android 10中使用requestLegacyExternalStorage=true可以取消分區(qū),但是在android11上面必須要有分區(qū),在選擇相冊(cè)中,需要使用外部?jī)?nèi)容url(EXTERNAL_CONTENT_URI)
在android11中文件存儲(chǔ)的位置:
1.圖片(包括照片和屏幕截圖),存儲(chǔ)在 DCIM/ 和 Pictures/ 目錄中历极。系統(tǒng)將這些文件添加到 MediaStore.Images 表格中窄瘟。
2.視頻,存儲(chǔ)在 DCIM/趟卸、Movies/ 和 Pictures/ 目錄中蹄葱。系統(tǒng)將這些文件添加到 MediaStore.Video 表格中氏义。
3.音頻文件,存儲(chǔ)在 Alarms/图云、Audiobooks/惯悠、Music/、Notifications/竣况、Podcasts/ 和 Ringtones/ 目錄中克婶,以及位于 Music/ 或 Movies/ 目錄中的音頻播放列表中。系統(tǒng)將這些文件添加到 MediaStore.Audio 表格中丹泉。
4.下載的文件情萤,存儲(chǔ)在 Download/ 目錄中。在搭載 Android 10(API 級(jí)別 29)及更高版本的設(shè)備上摹恨,這些文件存儲(chǔ)在 MediaStore.Downloads 表格中筋岛。此表格在 Android 9(API 級(jí)別 28)及更低版本中不可用。
在項(xiàng)目中
1.最好使用targetSDK=29避免很多android10.11的適配文件
2.在application中添加android:requestLegacyExternalStorage="true"
3.獲取相冊(cè)的地方修改為
public static final Intent choosePicture() {
if (Build.VERSION.SDK_INT >=30) {// Android 11 (API level 30)
return new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
} else {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
return Intent.createChooser(intent, null);
}
}