Accesso ordinato immagini e video nella stessa Cursore

Sto usando il android.content.CursorLoader classe per creare due Cursor oggetti di accesso ai contenuti multimediali memorizzati su l’utente della mia app del dispositivo. Vorrei dare all’utente la griglia con le loro immagini e video che conserva l’ordine da Android app Galleria.

Attualmente sto utilizzando un Cursor per accedere a Immagini e uno per l’accesso a Video. Con questo approccio, tutte le immagini precedere tutti i video (sono cioè in due gruppi separati). C’è un modo per accedere a Immagini e Video dalla stessa Cursor? Se non c’è un modo migliore per accedere a questi media sul dispositivo?

Per riferimento, ecco il codice che sto utilizzando:

Per Immagini:

CursorLoader cursorLoader = new CursorLoader(
    mContext,
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    IMAGE_PROJECTION,
    null,
    null,
    MediaStore.Images.Media._ID + " desc"
  );
  mImageCursor = cursorLoader.loadInBackground();

E 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



One Reply
  1. 72

    Dopo un sacco di ricerca e di giocare con il codice sorgente, finalmente sto un po ‘ più di familiarità con il filesystem di Android. Per ottenere un singolo Cursor il quale possibile accedere alle informazioni relative sia Images e Video ho usato il seguente:

    //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();
    • grazie per la condivisione del codice finale; questo è stato davvero utile per me!
    • c’è un problema, si accede al main image / data.. non le miniature. Interrogazione MediaStore.Immagini.Miniature per ogni cursore voce è troppo pesante. Tutte le idee?
    • Come posso mostrare un’icona play sul video ?
    • non ricevo tutti i video utilizzando questa soluzione… per favore mi suggeriscono che cosa è sbagliato con questo.. e.g : ci sono 102 video nel mio gallary, ma quando ho di recuperare utilizzando questo ottiene solo il 50 video
    • Il contenuto di uri è per storage esterno solo, probabilmente resto di 52 video di le tue sono nella memoria interna.

Lascia un commento