2011-11-01 10 views
10

Utilizo un cursor para devolver elementos para una vista de lista basada en medios. Me gustaría solo devolver elementos que están en una carpeta específica.Query MediaStore Cursor usando la carpeta específica

Esto funciona para mi lista de canciones, ya que este cursor se basa fuera MediaStore.Audio.Media.DATA, y puedo comprobar esto para la carpeta en el cursor:

final String folder = "'" + (new MyPrefs(this.PREF_PATH)).getString("music_folder",null) + "%'"; 

    audioCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, 
      MediaStore.Audio.Media.DATA + " LIKE " + folder, null,MediaColumns.TITLE + " COLLATE LOCALIZED ASC"); 
    startManagingCursor(audioCursor); 

Sin embargo, en mi Listview de artistas, el resultado de datos no está disponible para comprobar en contra:

audioCursor = getContentResolver().query(MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI, cols, 
      null, null,AudioColumns.ARTIST + " COLLATE LOCALIZED ASC"); 
     startManagingCursor(audioCursor);  

Puede alguien por favor compartir conmigo un buen método para la consulta de la MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI y sólo regresar a mi carpeta específica? Necesito usar el URI del artista porque utilizo la columna NUMBER_OF_TRACKS, que no está disponible en el URI de medios habitual.

Respuesta

4

se puede meter todo lo que desea en su selección, como este sub-select por ejemplo - que debería resolver su problema:

// The folder needs to end with the % wildcard or stuff doesn't work properly. 
String folder = "/mnt/sdcard/Music/Some Folder/"; 
folder = folder + "%"; 
String where = Artists._ID + " IN (SELECT " + Media.ARTIST_ID + " FROM audio WHERE " + 
    Media.DATA + " LIKE ?)"; 
String[] whereArgs = new String[]{folder}; 
audioCursor = getContentResolver().query(MediaStore.Audio.Artist.EXTERNAL_CONTENT_URI, 
    cols, where, whereArgs, AudioColumns.ARTIST + " COLLATE LOCALIZED ASC"); 
Cuestiones relacionadas