3

我目前正在创建一个音乐播放器,我正在使用光标检索设备上的音乐

mCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
            requestedColumns, null, null, null);

在哪里

private String[] requestedColumns = 
{
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.ALBUM_ID,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.ARTIST_ID,
    MediaStore.Audio.Media.YEAR,
    MediaStore.Audio.Media.DURATION,        
};

现在这一切正常,我成功地在我的设备/SD 卡上检索音乐。我的问题是:有没有办法让专辑艺术家为一首特定的歌曲?现在我不仅仅指某首歌的艺术家,而是指歌曲所属的整张专辑背后的主要艺术家。似乎没有某种MediaStore.Audio.Media.ALBUM_ARTIST.

MediaStore.Audio.Media.ALBUM附带说明:使用和之间有什么区别(如果有的话)MediaStore.Audio.ALBUMS

4

3 回答 3

2

我认为您正在寻找的是MediaStore.Audio.Albums.ARTIST,您可以将其查找为两阶段过程的第二部分。

Cursor cursor = getActivity().managedQuery(
    MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
    new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ARTIST}, 
    MediaStore.Audio.Albums._ID+ "=?", 
    new String[] {albumId}, 
    null);

歌曲的专辑 ID在哪里albumId,即您在之前的查询中得到了什么:MediaStore.Audio.Media.ALBUM_ID

MediaStore.Audio.ALBUMS其视为有关您所有专辑的元数据。MediaStore.Audio.Media.ALBUM指此音频文件来自的专辑。Media总是关于每个单独文件的元数据。

于 2013-06-30T15:43:13.430 回答
0

这行得通。不要问我如何!

   public Cursor getAlbumArtistCursor(Context context) {
    ContentResolver cr = context.getContentResolver();
    // query all media and get the album_artist field
    return cr.query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[]{  "album_artist", MediaStore.Audio.Media.ALBUM_ID,  MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media._ID}, null, null, null);
}
于 2020-01-07T16:05:29.053 回答
0

在我的应用程序中,我注意到了同样的问题,因此使用人工元数据进行了测试:

  • 包含两首曲目的专辑“Testalbum”
  • 第一首曲目:艺术家“Artist-A”,专辑艺术家“Test-Album-Artist”。
  • 第二首曲目:艺术家“Artist-B”,专辑艺术家“Test-Album-Artist”。

我使用 Android 4.4.4(Cyanogen)、Android 6.0.1(Google)和 Android 7.1.2(AOSP,非官方)进行了测试。我无法访问 Android 8.0 或 8.1。

结果:Android 将“Artist-A”显示为专辑艺术家。这显然是不正确的。

Android有两个错误:

  • Android 会忽略专辑艺术家标签。
  • Android 不会比较所有艺术家:如果艺术家不同,Android 应该选择various,但它会选择any

此外,上面提到的错误 #52309 很久以前就已经关闭,注释为“已过时”。即使是参考音乐播放器 Google Play Music 也有同样的错误,这是胡说八道。

那么我们有什么解决方案呢?

  1. 尝试重新打开旧的错误报告。
  2. 写一个新的错误报告。
  3. 修复 LineageOS 或类似源代码中的行为。
  4. 与错误“生活”。
  5. 阅读所有曲目并various在它们不完全匹配的情况下使用。
  6. 独立于 Android 获取元数据,例如使用标记库。
于 2018-04-03T23:01:16.247 回答