Android 使用MediaMetadataRetriever提取元数据时出现意外结果

Android 使用MediaMetadataRetriever提取元数据时出现意外结果,android,metadata,media,id3,Android,Metadata,Media,Id3,我正在尝试为Android构建自己的音乐播放器 对于一个列表,我需要歌曲的元数据,因此我使用MediaMetadataRetriever来提取它们,但是检索器无法提取大多数歌曲的元数据(669首中的630首)。在我的PC音乐软件中,元数据是可见的,并且在Windows资源管理器中也是可见的。如果我打开歌曲的属性,我可以修改它们,如果我在手机上加载更改的文件,它仍然无法工作。顺便说一下:如果我在手机上使用任何其他播放器,它总是能够加载元数据 MediaMetadataRetriever是否有缺陷?

我正在尝试为Android构建自己的音乐播放器

对于一个列表,我需要歌曲的元数据,因此我使用
MediaMetadataRetriever
来提取它们,但是检索器无法提取大多数歌曲的元数据(669首中的630首)。在我的PC音乐软件中,元数据是可见的,并且在Windows资源管理器中也是可见的。如果我打开歌曲的属性,我可以修改它们,如果我在手机上加载更改的文件,它仍然无法工作。顺便说一下:如果我在手机上使用任何其他播放器,它总是能够加载元数据

MediaMetadataRetriever
是否有缺陷?我应该使用其他库进行提取还是做错了什么

这个问题是相关的,但并不能真正帮助我解决问题

以下是我的一些代码示例:

MediaMetadataRetriever lMetaData = new MediaMetadataRetriever();
lMetaData.setDataSource(mAbsolutePath);
mArtist = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
mTitle = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
mAlbum = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
mAlbumArtist = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST);
mGenre = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
mSongNumber = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
mYear = lMetaData.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);

if(mArtist == null)
    mArtist = new String("");
if(mTitle == null) 
    mTitle = new String("");
if(mAlbum == null) 
    mAlbum = new String("");
if(mAlbumArtist == null) 
    mAlbumArtist = new String("");
if(mGenre == null) 
    mGenre = new String("");
if(mSongNumber == null) 
    mSongNumber = new String("");
if(mYear == null) 
    mYear = new String("");

MediaMetadataRetriever仅支持少数格式。我推荐。它支持几种额外的格式和协议。

我只是使用另一个外部库来处理标记,所以问题在某种程度上得到了解决。