10

我使用光标返回基于媒体的 Listview 的项目。我只想返回特定文件夹中的项目。

这适用于我的歌曲列表,因为此光标基于 MediaStore.Audio.Media.DATA,我可以检查光标中的文件夹:

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

但是,在我的艺术家列表视图中,无法检查 DATA 结果:

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

谁能与我分享一个查询MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI并仅返回我的特定文件夹的好方法?我需要使用 Artist URI,因为我使用了 NUMBER_OF_TRACKS 列,这在常规媒体 URI 中不可用。

4

1 回答 1

4

您可以将任何您想要的内容塞进您的选择中,例如这个子选择 - 这应该可以解决您的问题:

// 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");
于 2011-11-30T13:03:08.703 回答