尝试使用分区存储以 Android R (API 30) 为目标。我让图像选择器打开媒体库以允许用户使用以下方式选择 1 个或多个图像:
new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
我得到了 Uris 的列表,例如
content://com.android.providers.media.documents/document/image%3A189
content://com.android.providers.media.documents/document/image%3A190
然后我尝试生成请求删除权限的 Intent :
PendingIntent intent = MediaStore.createDeleteRequest(getContentResolver(), uris);
但这会抛出异常:
java.lang.IllegalArgumentException: All requested items must be referenced by specific ID
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:172)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:142)
at android.content.ContentProviderProxy.call(ContentProviderNative.java:732)
at android.content.ContentResolver.call(ContentResolver.java:2405)
at android.provider.MediaStore.createRequest(MediaStore.java:822)
at android.provider.MediaStore.createDeleteRequest(MediaStore.java:985)
...
如何将 Uris 转换为 MediaStore.createDeleteRequest
所需的特殊格式?
最佳答案
最后,我通过从返回的 URI 中提取媒体编号然后使用以下命令重新生成了 URI:
ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Long.parseLong(num));
创建 MediaStore API 所需的 URI。图像选择器没有返回其他媒体服务期望的 URI,这似乎很奇怪。
关于java - 尝试通过 MediaStore.createDeleteRequest(getContentResolver(), uris) 为 Android R (API 30) 创建删除请求以进行范围存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65229111/