2011-11-01 16 views
10

Uso un cursore per restituire gli elementi per una visualizzazione elenco basata su supporto. Vorrei solo restituire gli articoli che si trovano in una cartella specifica.Query MediaStore Cursore utilizzando una cartella specifica

Questo funziona per la mia lista Song, in quanto questo cursore è basato fuori MediaStore.Audio.Media.DATA, e posso controllare questo per la cartella nel cursore:

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

Tuttavia, a mio ListView per artisti, il risultato dei dati non è disponibile per controllare contro:

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

qualcuno può condividere con me un buon metodo per interrogare l'MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI e solo tornando la mia cartella specifica? Ho bisogno di utilizzare l'URI dell'artista perché utilizzo la colonna NUMBER_OF_TRACKS, che non è disponibile nel normale URI dei media.

risposta

4

È possibile stipare tutto quello che volete nella vostra selezione, come questo sub-select per esempio - che dovrebbe risolvere il 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"); 
Problemi correlati