如何使用 Android 中的内容解析器从流派列表中查询专辑唯一 ID



我正在开发音乐应用程序,我有一个基于艺术家,流派,专辑等的歌曲列表。现在我试图获得的是,来自所选流派的唯一专辑ID。

如果专辑 ID1 中有五首歌曲。然后当我选择它的流派时,显示 5 首歌曲具有相同的专辑 ID。但是我只想获得一个实例,而不是相同 id 的 5 个实例。如何实现这一点..请帮忙!

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。如何实现这一点。?

如果您正在使用音乐应用程序,最好让您的光标查询设备中的所有歌曲,因为您无疑需要该列表显示在您的库中。因此,如果您的光标包含重复的专辑(因为几首歌曲将属于一个专辑),您可以在实际填充列表的同时解决问题。

因此,如果您使用适配器使用不同的唱片集名称填充列表视图,

只需在光标上运行循环并将不同的唱片集名称仅存储在另一个列表中,然后使用此列表填充您的列表视图。所以它看起来像这样:

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

我还需要从MediaStore中获取特定GenreAlbums,这就是我的做法:

您所需要的只是按专辑分组,以获取该特定类型的专辑

public static CursorLoader getAlbumsByGenre(Context context, int genreId) {
    Uri uri = MediaStore.Audio.Genres.Members.getContentUri("external", genreId);
    String selection = MediaStore.Audio.Media.ALBUM + " IS NOT NULL) GROUP BY (" + MediaStore.Audio.Media.ALBUM;
    return new CursorLoader(context, uri, null, selection, null, null);
}

最新更新