ListView, отображающий аудио и видео из медиамагазина

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

Итак, чтобы запросить видео и аудио, я делаю следующее:

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.

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

Спасибо.


person Line    schedule 05.03.2012    source источник


Ответы (1)


Это возможно из 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, который реализует логику порядка.

person haemish    schedule 27.06.2013