Android MediaStore.Audio 没有加载所有元标记

Android MediaStore.Audio doesn't load all MetaTags

要在 android-Device 上获取所有本地 Music-Files 我正在使用 ContentResolver,从 MediaStore.Audio 获取数据。 这是我如何加载所有标题及其艺术家的示例:

ContentResolver musicResolver = act.getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
    Cursor musicCursor = musicResolver.query(musicUri, null, selection, null, sortOrder);

if(musicCursor!=null && musicCursor.moveToFirst()){
    int titleColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
    int artistColumn = musicCursor.getColumnIndex(android.provider.MediaStore.Audio.Media.ARTIST);

    do {
        String thisTitle = musicCursor.getString(titleColumn);
        String thisArtist = musicCursor.getString(artistColumn);
        //save them somewhere
    }while (musicCursor.moveToNext());
}

所以这段代码适用于我所有音乐的大约 75%。

但是 有曲目,其中艺术家(以及一些其他值,如 artistKey、曲目、封面等)return 为空。但是标题 album_name 和 artistId 加载正确。

标签应该是正确的(正确显示在计算机和其他 Music-Apps 上)。此外,格式与正在播放的曲目没有什么不同。

你们中有人遇到过同样的问题并解决了这个问题吗? 所有丢失的 Meta-Tags 甚至都没有加载 MediaMetadataRetriever。我无法解释我的某些文件有什么问题以及为什么其他应用程序可以正确加载它们。

如果需要,我可以在某处上传工作和 not-working Music-File。

管理如何去做。

有些专辑只在一个(主要是第一首或最后一首)曲目中存储了最多的信息(艺术家姓名、专辑封面),而不是全部。 这不是很常见,但我的专辑中大约有 20% 是这样的,即使是购买的。

因此,如果您是 loading/displaying 这些专辑中的一张,您需要遍历所有专辑曲目,直到找到一张,其中存储了您在其他专辑中丢失的信息。 由于我的其他代码,我让它有点不同,但我认为这是最容易理解的方式。