El acceso ordenado de imágenes y de vídeo en el mismo Cursor

Estoy usando el android.content.CursorLoader clase para crear dos Cursor objetos para acceder a los medios almacenados en el usuario de mi aplicación del dispositivo. Me gustaría dar al usuario una vista de cuadrícula de sus almacenan las imágenes y el vídeo que se conserva el orden de los Android de la Galería de la aplicación.

Actualmente estoy usando uno Cursor acceder a las Imágenes y el acceso a Video. Con este enfoque, todas las imágenes que preceden a todos los videos (es decir, en dos grupos separados). Hay una manera de acceder a las Imágenes y el Vídeo de la misma Cursor? Si no, hay una mejor manera de acceder a estos medios de comunicación en el dispositivo?

De referencia, este es 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();
InformationsquelleAutor Cam | 2013-07-15

1 Kommentar

  1. 77

    Después de mucha investigación y jugando con el código fuente, por fin estoy un poco más familiarizado con el sistema de archivos de Android. Para obtener un solo Cursor que puede tener acceso a información acerca de los dos Images y Video he utilizado el 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();
    • gracias por compartir tu código final; esto fue realmente útil para mí!
    • hay un problema, se accede a la imagen principal / datos.. no las miniaturas. Consultar MediaStore.Imágenes.Las miniaturas de cada cursor artículo es muy pesado. Alguna idea?
    • no estoy recibiendo de todos los videos de usar esta solución… por favor, me sugieren qué hay de malo con esto.. dirección.g : hay 102 video en mi gallary pero cuando voy a recuperar el uso de esta a solo 50 videos
    • El contenido de uri es para almacenamiento externo solo, probablemente resto de 52 videos tuyos están en el almacenamiento interno.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea