我想通过使用MediaStore在手机上获取所有艺术家的姓名;我已经有了完整的列表,但由于有多个链接歌曲/艺术家,所有条目都有副本。是否有任何方法可以使用查询只获取其中一个,而不获取任何重复项?
我的问题是:
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DURATION
};
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
null,
null);
提前谢谢!
最佳答案
在查询中使用关键字DISTINCT将返回不重复的值
例如,查询许多音频号码时只列出唱片集名称
new String[] { "DISTINCT " + MediaStore.Audio.Playlists.Members.ALBUM_ID + " as _id"}
但我发现你只能返回一列
我保持它的简单性,并在遍历光标时执行以下操作。传递价值,对你来说是艺术家,
if (value.length() > 0) {
// check if value already exists
if (!listItems.contains(value)) {
// doesn't exist, add it
listItems.add(value);
}
}
这是一个简单的方法。
你可以在google play上的“我的应用程序播放列表管理器”中查看。我用这种方法来挑选艺术家、年份等。