1

メディアストアからオーディオとビデオの両方を表示するリストを作成しようとしています。ただし、そのようなクエリを作成する方法がわかりません。オーディオとビデオの両方の情報を同時に取得することさえ可能ですか?

したがって、ビデオとオーディオを照会するには、次のようにします。

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 のクエリを作成する方法はありますか、または or を使用するなど、より複雑なものが必要ですCursorJoinerMergeCursor

最初に述べたように、私の目標は、メディアストア内のすべてのオーディオとビデオを表示するリストを作成することです。これは正しいアプローチですか、それとも間違った角度から見ているのでしょうか?

ありがとう。

4

1 に答える 1

0

適切な選択句で MediaStore.Files を使用することにより、API-11 から可能です。

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 でカーソルをラップします。

于 2013-06-27T14:41:49.760 に答える