迁移到SDK 30并使用Android 11时,获取额外空间的问题通常与存储访问权限和分区存储(Scoped Storage)有关。以下是关于这个问题的基础概念、优势、类型、应用场景,以及可能遇到的问题和解决方案。
Scoped Storage 是Android 11引入的一种新的存储机制,旨在增强应用的隐私保护。它限制了应用对共享存储的访问权限,应用只能访问其自己的沙盒目录,除非用户明确授权。
在Android 11及更高版本中,所有应用默认使用Scoped Storage。如果你的应用需要访问外部存储中的文件,必须适配Scoped Storage。
MediaStore
API访问媒体文件。Storage Access Framework
(SAF)让用户选择文件。AndroidManifest.xml
中声明存储权限。AndroidManifest.xml
中声明存储权限。以下是一个使用MediaStore
API访问媒体文件的示例:
// 查询图片
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}
String[] projection = new String[]{
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
};
String sortOrder = MediaStore.Images.Media.DATE_TAKEN + " DESC";
Cursor cursor = getContentResolver().query(collection, projection, null, null, sortOrder);
if (cursor != null) {
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
String displayName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
// 处理图片
}
cursor.close();
}
通过以上方法,你可以成功迁移到SDK 30并适配Android 11的Scoped Storage,解决获取额外空间的问题。
领取专属 10元无门槛券
手把手带您无忧上云