2017-02-15 1 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 컬럼과 값 다음 내가 할 쿼리를 형성 제거 할 때 대신 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에 대한 열을 얻을 수 있다고 생각할 수 없습니다.

이 열의 출처는 어디입니까? 장치 제조업체에 의해 수정 가능 안드로이드의 버전에서 구현으로 com.android.providers.media.documentsContentProvider에서

.

어디에서 정의를 찾을 수 있습니까?

대부분은 Android SDK의 일부가 아닙니다. OpenableColumns은 두 개의 열을 나타냅니다. 당신은 사용자가 비디오를 선택하고 지원하는 모든 ACTION_GET_CONTENT 활동에서 비디오를 선택하도록 요청하는 의도

을 시작

코드입니다. IntentCATEGORY_OPENABLE을 추가하면 ContentResolveropenInputStream()을 사용하여 Uri으로 식별되는 콘텐츠를 읽을 수 있습니다. Uri은 파일 시스템에서 읽을 수있는 파일로 백업해야하며, Uri으로 주어진 파일을 신뢰할 수있는 방법으로 확인할 수 있어야합니다.

관련 문제