2011-11-01 30 views
10

Tôi sử dụng con trỏ để trả về các mục cho Chế độ xem danh sách dựa trên phương tiện. Tôi chỉ muốn trả lại các mục nằm trong một thư mục cụ thể.Truy vấn Con trỏ MediaStore bằng thư mục cụ thể

này làm việc cho danh sách bài hát của tôi, như con trỏ này được dựa trên MediaStore.Audio.Media.DATA, và tôi có thể kiểm tra điều này cho thư mục trong con trỏ:

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

Tuy nhiên, trong listview của tôi cho nghệ sĩ, kết quả DỮ LIỆU không có sẵn để kiểm tra chống lại:

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

bất cứ ai có thể vui lòng chia sẻ với tôi một phương pháp tốt cho truy vấn MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI và chỉ trở về thư mục cụ thể của tôi? Tôi cần sử dụng URI nghệ sĩ vì tôi sử dụng cột NUMBER_OF_TRACKS, cột này không có sẵn trong URI truyền thông thông thường.

Trả lời

4

Bạn có thể nhồi nhét bất cứ điều gì bạn muốn vào lựa chọn của bạn, như thế này phụ chọn ví dụ - mà nên giải quyết vấn đề của bạn:

// 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"); 
Các vấn đề liên quan