2012-03-05 6 views
1

mediastoreからオーディオとビデオの両方を表示するリストを作成しようとしています。しかし、私はどのようにこのようなクエリを作成するのか分かりません - オーディオとビデオの両方の情報を同時に取得することも可能ですか?だから私はこれを行う映像と音声を照会するmediastoreからのオーディオとビデオを表示する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を使用するなど、もっと複雑なものが必要ですか?

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

ありがとうございました。

答えて

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

関連する問題