android image video cursor media

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