2017-02-15 13 views
0

ユーザーが選択した画像またはビデオのデータを照会します。私のonActivityResultは、指定されたURIを持つ画像のDATAフィールドを問い合わせます。私はqueryColumnsを削除する代わりに、とき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 

が、データ列は、NULLである私は、次の列と値を取得するクエリを形成:

この列はから来
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

が、データ列には、あなたのUriMediaStoreとは何の関係もありませんので、つまり

nullです。ランダムに選択されたプロバイダーからランダムに選択された列を選択することはできず、無作為に選択された任意の列の列を得ることができると考えています。Uri

この列の元はどこですか?

あなたのAndroidのバージョンに実装されていて、おそらくデバイスメーカーによって変更されているように、com.android.providers.media.documentsContentProviderから。

どこの定義がありますか?

ほとんどの場合、Android SDKの一部ではありません。 OpenableColumnsは、これらの列の2つを表します。あなたは、ユーザーがビデオを選ぶサポートする任意のACTION_GET_CONTENT活動からビデオを選択することを要求している意図

を開始するための

コード。 IntentCATEGORY_OPENABLEを追加すると、ContentResolveropenInputStream()を使用して、Uriで示される内容を読み取ることができます。 Uriには、Uriのファイルを確実に識別する方法はもちろん、ファイルシステムから読み取れるファイルをバックアップする必要があります。