ListView отображает аудио и видео из медиастор - PullRequest
1 голос
/ 05 марта 2012

Я пытаюсь создать список, который показывает аудио и видео из медиастор. Однако я не уверен, как создать такой запрос - возможно ли вообще получить информацию для аудио и видео одновременно?

Итак, для запроса видео и аудио я делаю это:

String[] projV = { MediaStore.Video.Media._ID,
            MediaStore.Video.Media.DATA,
            MediaStore.Video.Media.DISPLAY_NAME,
            MediaStore.Video.Media.DURATION,
            MediaStore.Video.Media.DATE_TAKEN };

Cursor videoCursor = getActivity().managedQuery(
                MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projV, null,
                null, null);

String[] projA = { MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.DISPLAY_NAME,
            MediaStore.Audio.Media.MIME_TYPE,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.DATE_ADDED };
Cursor audioCursor = getActivity().managedQuery(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projA, null,
                null, null);

Я изучил использование CursorJoiner или MergeCursor, но я не уверен, как использовать эти или даже уверен, что это правильное решение.

Итак, мой вопрос; Есть ли способ построить запрос для mediaStore, который возвращает курсор с информацией как для аудио, так и для видео, или мне нужно что-то более сложное, например, с помощью CursorJoiner или MergeCursor.

Как я уже упоминал вначале, моя цель - создать список, отображающий все аудио и видео в хранилище данных - это правильный подход или я смотрю на него под неправильным углом?

Спасибо.

1 Ответ

0 голосов
/ 27 июня 2013

Это возможно из API-11 с помощью MediaStore.Files с соответствующим предложением выбора.

public Loader<Cursor> onCreateLoader(int id, Bundle bundle)
{
    final String PROJECTION[] = {FileColumns._ID, FileColumns.DATA, FileColumns.DATE_ADDED};
    final String ORDER = FileColumns.DATE_ADDED + " DESC";
    final String SELECTION =  "(" + FileColumns.MEDIA_TYPE + "=" + FileColumns.MEDIA_TYPE_VIDEO +") OR (" + FileColumns.MEDIA_TYPE + "=" + FileColumns.MEDIA_TYPE_IMAGE + ")";
    return new CursorLoader(getActivity(), Files.getContentUri("external"), PROJECTION, SELECTION, null, ORDER);
}

До этого вы можете использовать MergeCursor, если вам не важен порядок сортировки. Посмотрите на MatrixCursor, если вам нужно управлять порядком сортировки. Или же оберните ваши курсоры в CursorWrapper, который реализует логику порядка

...