【问题标题】:Create Uri for MediaStore.createTrashRequest function为 MediaStore.createTrashRequest 函数创建 Uri
【发布时间】:2021-07-01 01:52:05
【问题描述】:

android documentation 表示 MediaStore createTrashRequest 函数需要一个 Uris 列表作为参数。当我执行搜索时,我可以看到有两种不同的 Uri:DocumentUri 和 MediaUri。但从文档中,我无法确定需要哪种 Uri 作为参数。

我尝试传递从 ACTION_PICK 意图返回的 Uri,但没有成功。错误是“java.lang.IllegalArgumentException: All requested items must be referenced by specific ID

示例 Uri:content://com.google.android.apps.photos.contentprovider/-1/1/content://media/external/images/media/30/ORIGINAL/NONE/image/jpeg/118418547

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    ArrayList<Uri> imagesForDeletion = new ArrayList<Uri>();
    Uri imageURI = data.getData();
    imagesForDeletion.add(imageURI);

    List<Uri> urisToModify = imagesForDeletion;
    PendingIntent editPendingIntent = MediaStore.createTrashRequest(getContentResolver(), urisToModify,       true);

    try {
        // Launch a system prompt requesting user permission for the operation.
        startIntentSenderForResult(editPendingIntent.getIntentSender(), 101, null, 0, 0, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }

【问题讨论】:

    标签: java android


    【解决方案1】:

    它在使用图像 ID 创建新 URL 后开始工作:MediaStore.MediaColumns._ID

    ArrayList<Uri> imagesForDeletion = new ArrayList<Uri>();
    Uri media_uri = data.getData();
    String[] column = {MediaStore.Images.Media._ID};
    
    Cursor cursor = getContentResolver().query(media_uri, column,
            null, null, null);
    cursor.moveToFirst();
    if(cursor.getCount()>0){
        int Media_ID = cursor.getInt(cursor
                .getColumnIndex(MediaStore.MediaColumns._ID));
    
        Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Media_ID);
        imagesForDeletion.add(uri);
    
        List<Uri> urisToModify = imagesForDeletion;
        PendingIntent editPendingIntent = MediaStore.createTrashRequest(getContentResolver(), urisToModify, true);
    
        try {
            // Launch a system prompt requesting user permission for the operation.
            startIntentSenderForResult(editPendingIntent.getIntentSender(), 101, null, 0, 0, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    cursor.close();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2010-10-06
      • 2015-02-22
      • 1970-01-01
      • 2021-12-21
      • 2012-08-28
      • 2015-01-05
      相关资源
      最近更新 更多