我正在开发音乐应用程序,我有一个基于艺术家,流派,专辑等的歌曲列表。现在我想要的是来自所选Genre的独特专辑ID。例如:
如果AlbumId1中有五首歌曲。然后,当我选择其类型时,将显示5首具有相同专辑ID的歌曲。但我想只获得一个实例而不是5个相同ID的实例。如何实现这一点..请帮忙!
List<Track> trackList = new ArrayList<Track>();
String orderBy=android.provider.MediaStore.Audio.Albums.ALBUM_ID;
String selection= android.provider.MediaStore.Audio.Albums.ALBUM_ID ;
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Genres.Members.getContentUri("external",
categoryID), null, selection, null, orderBy);
使用此查询获取所有专辑ID并且很少也是重复的。我只想要唯一的ID,并希望删除所有重复的ID。如何实现这一点。?
答案 0 :(得分:0)
如果您正在使用音乐应用,最好让光标查询设备中的所有歌曲,因为您无疑需要在列表中显示该列表。因此,如果您的光标包含重复的专辑(因为几首歌曲将属于一个专辑),您可以在实际填充列表时解决问题。
因此,如果您使用适配器填充具有不同相册名称的列表视图,只需在光标上运行循环并仅将不同的相册名称存储在另一个列表中,然后使用此列表填充列表视图。所以它看起来像这样:
String temp, cval;
ArrayList<String> albumlist = new ArrayList<>();
cursor.moveToFirst();
temp = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
albumlist.add(temp);
do
{
cval = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
if(!temp.equals(cval))
{
//Here you can check for it's genre as well, up to you
albumlist.add(cval);
//Only add the distinct album names to albumlist
}
temp = cval;
} while(cursor.moveToNext());
如果你仍然想按照类型进行查询,你可以这样做并仍然使用上述代码的版本从歌曲中获取不同的专辑ID
答案 1 :(得分:0)
我还需要从Albums
获取特定Genre
的{{1}},这就是我的做法:
您只需要 GROUP BY 相册,即可获得该特定类型的专辑
MediaStore