2017-02-15 63 views
0

我想查詢用戶選擇的圖像或視頻的數據。我的onActivityResult查詢具有給定URI的圖像的DATA字段。ContentResolver的查詢結果有奇怪的列

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 

但數據列空,而不是當我刪除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

但數據列空

那是因爲你Uri無關與MediaStore。您不能從隨機選擇的提供商中隨機選擇一列,並認爲您可以隨機選擇那些隨機選擇的列Uri

這個柱子從哪裏來的?

com.android.providers.media.documentsContentProvider,在您的Android版本中實現,並可能由您的設備製造商修改。

我在哪裏可以找到他們的定義?

大多數不是Android SDK的一部分。 OpenableColumns代表其中兩列。

代碼開始的意圖

你要求用戶選擇從任何ACTION_GET_CONTENT的活動,支持選擇視頻的視頻。如果您將CATEGORY_OPENABLE添加到您的Intent中,則可以使用ContentResolveropenInputStream()來讀取由Uri標識的內容。要求Uri由可從文件系統讀取的文件支持,更不用說在給定Uri的情況下識別該文件的任何可靠方式。