2011-11-01 16 views
10

Ortam tabanlı bir Liste Görünümü için öğeler döndürmek için bir imleç kullanıyorum. Sadece belirli bir klasördeki öğeleri iade etmek istiyorum.Belirli bir klasör kullanarak Query MediaStore İmleç

bu imleç MediaStore.Audio.Media.DATA kapalı dayanır gibi bu benim Şarkı listesi için çalışır ve ben imleç içinde klasör için bu kontrol edebilirsiniz: benim Listview,

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

Ancak

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

kimse benimle MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI sorgulama ve sadece benim belirli bir klasör döndürmek için iyi bir yöntem paylaşır mısınız: sanatçılar, VERİ sonucu karşı kontrol etmek yok? Düzenli Medya URI'sinde bulunmayan NUMBER_OF_TRACKS sütununu kullandığım için Artist URI'sini kullanmam gerekiyor.

cevap

4

Sen gibi seçiminize içine ne istersen girdiğinden bu alt-select Örneğin - sorununuzu çözmek gerekir:

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