ContentResolver的查询结果有奇怪的列

时间:2017-02-15 14:38:15

标签: android android-contentresolver

我想查询用户选择的图像或视频的数据。我的onActivityResult查询具有给定URI的图像的DATA字段。

protected final String[] queryColumns = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns._ID, MediaStore.MediaColumns.MIME_TYPE};
[...]
Cursor cursor = getContentResolver().query(uri, queryColumns, null, null, null);
    //uri is content://com.android.providers.media.documents/document/image%3A42026

但DATA列为空,相反,当我从查询中删除queryColumns时,我得到以下列和值:

0, name: document_id type: 3 ,data: image:42026
1, name: mime_type type: 3 ,data: image/jpeg
2, name: _display_name type: 3 ,data: 20170208_193525_Burst01.jpg
3, name: last_modified type: 1 ,data: 1486578925000
4, name: flags type: 1 ,data: 1
5, name: _size type: 1 ,data: 3246750
6, name: filePath type: 3 ,data: /storage/80BF-9F6E/DCIM/Camera/20170208_193525_Burst01.jpg
7, name: drmType type: 1 ,data: 0
8, name: drmMimeType type: 3 ,data: image/jpeg
9, name: drmContentType type: 1 ,data: 0
10, name: canForward type: 1 ,data: 1
11, name: judgeRight type: 1 ,data: -1

这些栏目来自哪里?我在哪里可以找到他们的定义?

启动意图的代码:

  protected void galleryIntent() {
        Intent intent = new Intent();
        intent.setType("image/* video/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);

        if (Build.VERSION.SDK_INT >= 18) {
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
            startActivityForResult(Intent.createChooser(intent, "Select some files"), PICK_IMAGE_MULTIPLE);
        } else {
            startActivityForResult(Intent.createChooser(intent, "Select a file"), SELECT_FILE);
        }

    }

1 个答案:

答案 0 :(得分:2)

  

但DATA列为空

这是因为您的UriMediaStore无关。您无法从随机选择的提供商中选择随机选择的列,并认为您可以为随机选择的Uri提供这些列。

  

这些栏目来自哪里?

来自com.android.providers.media.documents ContentProvider,已在您的Android版本中实施,并且可能已由您的设备制造商修改。

  

我在哪里可以找到他们的定义?

大多数都不是Android SDK的一部分。 OpenableColumns代表其中两列。

  

启动意图的代码

您要求用户从支持选择视频的任何ACTION_GET_CONTENT活动中选择视频。如果您向CATEGORY_OPENABLE添加Intent,则可以使用ContentResolveropenInputStream()来读取Uri标识的内容。要求Uri由您可以从文件系统读取的文件支持,更不用说在给定Uri的情况下以任何可靠的方式识别该文件。