Android:查询 MediaStore.Audio.Artists.Albums

标签 android media android-contentprovider

目前,我正在通过正常的ContentResolver成功查询MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,并获得预期的结果。文档说有一个嵌套类 MediaStore.Audio.Artists.Albums 是一个包含每个艺术家的每个专辑的子目录,但它没有等效的 EXTERNAL_CONTENT_URI。如何查询?

或者更一般地说,给定一个艺术家,我如何列出包含该艺术家歌曲的每个专辑?目前,我正在通过 MediaStore.Audio.Media 进行详尽的搜索来搜索艺术家并将每个专辑记录在 HashMap 中,但这似乎既错误又低效。有没有更有效的方法直接使用ContentProviders?

最佳答案

这不完全是你想要做的事情,我认为你想做的事情。如果是这样,你可以通过点击媒体表(Media.EXTERNAL_CONTENT_URI)来获取某个艺术家的所有专辑——而不是专辑艺术家。 ) 对于 where 子句中带有 Media.ARTIST_ID 的不同 Media.ALBUM 。这适用于任何 Android 版本。

但是...如果您想与专辑艺术家合作...

在 2.3.3 之前,专辑艺术家 MP3 标签被忽略,并且不在媒体存储架构中。现在它已经存在了——例如 CyanogenMod 就有了——但它还没有被记录下来。如果您打算发布代码,则需要对其进行测试并解决该代码是否丢失的问题,或者将您的代码限制为包含该代码的 Android 版本。否则,您将陷入艺术家数据库的困境,该数据库代表每首轨道中的每位艺术家,如果您正在考虑专辑,这可能不是您想要的。

这是我在代码中进行的测试:

Cursor cur = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, null, null, null, null);
if ((cur.getColumnIndex("album_artist") == -1) || (cur.getColumnIndex("album_artist_id") == -1))
{
    showartist = false;
}
else
{
    showartist = true;
}

您可以选择不同的 ID 来获取专辑艺术家列表,如下所示:

cur = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, new String[]{"distinct album_artist_id", "album_artist"}, null, null, "album_artist collate nocase");

请注意,由于这些列没有记录并且常量不可用,因此您必须编写自己的常量或对字符串进行硬编码。您可能可以从那里找出其余的内容。

关于Android:查询 MediaStore.Audio.Artists.Albums,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7095230/

相关文章:

css - 媒体屏幕宽度问题的网站优化(@media css)

javascript - 检测浏览器当前 "media"模式

android - Content Provider 无法在 Nexus 系列设备上运行

两个日期之间的 Android 通话记录数据和来自同一号码的通话总时长。

android - 提高 Android 模拟器的速度

android - Android 媒体音量 Controller (不管它叫什么)的自定义主题?

android - 暗模式 : useColorScheme() always returns light on Android

android - 从 CalendarContract 获取与会者详细信息

android - PhoneGap 版本 : icons and splashscreens are not displayed correctly

java - 在preferences.xml中设置背景颜色