1

我正在尝试创建一个同时显示来自 mediastore 的音频和视频的列表。但是,我不确定如何创建这样的查询 - 甚至可以同时获取音频和视频的信息吗?

所以要查询视频和音频,我这样做:

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);

我研究过使用CursorJoineror MergeCursor,但我不确定如何使用这些,甚至不确定它是正确的解决方案。

所以我的问题是;有没有办法为 mediaStore 构造一个查询,该查询返回一个带有音频和视频信息的游标,或者我需要更复杂的东西,例如使用CursorJoineror MergeCursor

正如我在开始时提到的,我的目标是在媒体商店中有一个显示所有音频和视频的列表 - 这是正确的方法还是我从错误的角度看待它?

谢谢。

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 回答