2017-02-15 2 views
0

Я хочу запросить данные изображения или видео, выбранные пользователем. Мои запросы onActivityResult для поля DATA изображения с заданным URI.Результаты запроса 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.documents С ContentProvider, как это реализовано в вашей версии Android и, возможно, изменены производителем устройства.

Где я могу найти их определения?

Большинство из них не являются частью Android SDK. OpenableColumns представляют две из этих столбцов.

Код для запуска пристального

Вы запрашиваете, что пользователь может выбрать видео из любой ACTION_GET_CONTENT деятельности, которая поддерживает выбирая видео. Если вы добавите CATEGORY_OPENABLE в ваш Intent, вы можете использовать ContentResolver и openInputStream() для чтения в содержании, указанном Uri. Существует требование, чтобы Uri был подкреплен файлом, который вы можете прочитать из файловой системы, не говоря уже о каком-либо надежном способе идентификации этого файла с учетом Uri.

Смежные вопросы