如何解决java.lang.IllegalArgumentException:所有请求的项目都必须由特定的ID引用Android
我在致电MediaStore.createWriteRequest(contentResolver,uris)
时收到此异常。与在Anrdroid Q及更高版本中一样,我们必须使createWriteRequest写入存储。因此,我正在尝试以下代码并获取异常。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
List<Uri> uris = new ArrayList<>();
uris.add(mediaUri);
MediaStore.createWriteRequest(contentResolver,uris);
//code
}
解决方法
您的 Uri 路径错误,这就是显示错误消息的原因。
无效的 Uri 路径: content://com.abc.photoapp.provider/external_files/emulated/0/Pictures/camara/1623819097267.jpg
有效路径为: content://media/external/images/media/52703
在这里,我一步一步解释删除媒体的文件路径。
第 1 步:
假设你有一个这样的文件路径 "/storage/emulated/0/tempPic/export_image.jpg"
File tempFile=new File("/storage/emulated/0/tempPic/export_image.jpg");
long mediaID=getFilePathToMediaID(tempFile.getAbsolutePath(),context);
public long getFilePathToMediaID(String songPath,Context context)
{
long id = 0;
ContentResolver cr = context.getContentResolver();
Uri uri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.Audio.Media.DATA;
String[] selectionArgs = {songPath};
String[] projection = {MediaStore.Audio.Media._ID};
String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
Cursor cursor = cr.query(uri,projection,selection + "=?",selectionArgs,null);
if (cursor != null) {
while (cursor.moveToNext()) {
int idIndex = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
id = Long.parseLong(cursor.getString(idIndex));
}
}
return id;
}
第 2 步:
为 Uri 创建媒体 ID
Uri Uri_one = ContentUris.withAppendedId( MediaStore.Images.Media.getContentUri("external"),mediaID);
// content://media/external/images/media/52703
内容 Uri 根据您的文件类型而变化:
如果图像则:MediaStore.Images.Media.getContentUri("external") 如果是视频则:MediaStore.Video.Media.getContentUri("external")
第 3 步:
准备并调用删除
List<Uri> uris=new ArrayList<>();
uris.add(<Add Paht : Uri_one >);
uris.add(<Add Paht : Uri_two >);
uris.add(<Add Paht : Uri_three >);
requestDeletePermission( context,uris);
enter image description here 调用该方法后,询问权限对话框。 requestDeletePermission 方法是 onActivityResult 方法的返回结果。
上述方法支持 android 11(目标 SDK 版本 30)及更高版本。删除媒体文件不需要 manage_external_storage 权限。您可以使用视频、音频和图像等媒体。
如果您要删除文档文件,则必须要求 manage_external_storage 权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。