Доступ к заказанным изображениям и видео в том же курсоре
Я использую android.content.CursorLoader
класс для создания двух Cursor
объекты для доступа к медиафайлам, хранящимся на устройстве пользователя моего приложения. Я хотел бы дать пользователю сетку просмотра их сохраненных изображений и видео, которые сохраняют порядок из приложения галереи Android.
В настоящее время я использую один Cursor
для доступа к изображениям и один для доступа к видео. При таком подходе все изображения предшествуют всем видео (т.е. они находятся в двух отдельных группах). Есть ли способ получить доступ к изображениям и видео с одного Cursor
? Если нет, есть ли лучший способ получить доступ к этим носителям на устройстве?
Для справки вот код, который я использую:
Для изображений:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
IMAGE_PROJECTION,
null,
null,
MediaStore.Images.Media._ID + " desc"
);
mImageCursor = cursorLoader.loadInBackground();
И видео:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
VIDEO_PROJECTION,
null,
null,
MediaStore.Video.Media._ID + " desc"
);
mVideoCursor = cursorLoader.loadInBackground();
1 ответ
После долгих исследований и игры с исходным кодом я наконец-то стал немного лучше знаком с файловой системой Android. Чтобы получить один Cursor
который может получить доступ к информации о обоих Images
а также Video
Я использовал следующее:
// Get relevant columns for use later.
String[] projection = {
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.DATE_ADDED,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Files.FileColumns.MIME_TYPE,
MediaStore.Files.FileColumns.TITLE
};
// Return only video and image metadata.
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
+ " OR "
+ MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
Uri queryUri = MediaStore.Files.getContentUri("external");
CursorLoader cursorLoader = new CursorLoader(
this,
queryUri,
projection,
selection,
null, // Selection args (none).
MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order.
);
Cursor cursor = cursorLoader.loadInBackground();