android - Acceda a imágenes y videos ordenados en el mismo Cursor
image media (1)
Estoy usando la clase android.content.CursorLoader
para crear dos objetos Cursor
para acceder a los medios almacenados en el usuario del dispositivo de mi aplicación. Me gustaría darle al usuario una vista en cuadrícula de sus imágenes y videos almacenados que conservan el orden de la aplicación Android Gallery.
Actualmente estoy usando un Cursor
para acceder a Imágenes y otro para acceder a Video. Con este enfoque, todas las imágenes preceden a todos los videos (es decir, están en dos grupos separados). ¿Hay alguna manera de acceder a Imágenes y Video desde el mismo Cursor
? Si no, ¿hay una mejor manera de acceder a estos medios en el dispositivo?
Como referencia, aquí está el código que estoy usando:
Para imágenes:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
IMAGE_PROJECTION,
null,
null,
MediaStore.Images.Media._ID + " desc"
);
mImageCursor = cursorLoader.loadInBackground();
Y video:
CursorLoader cursorLoader = new CursorLoader(
mContext,
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
VIDEO_PROJECTION,
null,
null,
MediaStore.Video.Media._ID + " desc"
);
mVideoCursor = cursorLoader.loadInBackground();
Después de investigar mucho y jugar con el código fuente, finalmente estoy un poco más familiarizado con el sistema de archivos de Android. Para obtener un solo Cursor
que pueda acceder a información sobre Images
y Video
, utilicé lo siguiente:
// 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();