MediaMetadataRetriever的Android问题:返回空值

MediaMetadataRetriever的Android问题:返回空值,android,Android,正在尝试使用MediaMetadataRetriever检索mp3信息(相册名称,…)。 在模拟器中,它工作得很好。在我的设备上,大多数方法返回null MediaMetadataRetriever mmr=新的MediaMetadataRetriever(); mmr.setDataSource(songPath) 字符串albumName=mmr.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u ALBUM) 字符串mp3Titl

正在尝试使用MediaMetadataRetriever检索mp3信息(相册名称,…)。 在模拟器中,它工作得很好。在我的设备上,大多数方法返回null

MediaMetadataRetriever mmr=新的MediaMetadataRetriever(); mmr.setDataSource(songPath)

字符串albumName=mmr.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u ALBUM)

字符串mp3Title=mmr.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u TITLE)

字符串mimekey=mmr.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u MIMETYPE)

mp3肯定有这些信息,因为在模拟器中显示这些信息(同一个文件!)。文件路径正常,mimekey已设置,没有异常

我使用的是SdkVersion=14。 我查过了 及 但这没用。无法调试MediaMetadataRetriever.extractMetadata,因为它的本机代码

有什么想法吗?

你试过了吗


我在视频GPS定位方面也有同样的问题。在一些设备中它工作,而在一些设备中它不工作

修复是次要的,而不是简单的

setDataSource(context, uri)
我曾经

setDataSource(absoluteFilePath)

希曼:谢谢你的回答。我现在试过了,但没法运行。这似乎不是那么容易,因为我需要libs,而你写的可能让那些不熟悉Android NDK的人感到困惑。目前我还没有时间进一步尝试。其他人可能会感兴趣:我使用lib org.farng.mp3.mp3文件来获取这些信息。@SJX,这个项目附带了预构建的库,而且在我看来,还有关于如何设置和使用它的优秀文档。我不确定是什么让人困惑。我讨厌官方API中的MediaMetadataRetriever功能如此不正常,我们不得不放弃它,转而使用第三方替代方案,比如您推荐的那个。我得试一下。希望它能解决我的问题。@WilliamSeemann这可能是一篇老文章,但我面临着与OP相同的问题。我想知道您推荐的第三方库实际上是C/C++代码的包装器。你能建议应该使用哪个编译版本吗?因为我不知道我的应用程序将运行什么本机体系结构,而且选择一个特定的版本可能不适用于任何地方。。这么多年前你找到解决办法了吗?我面临着同样的问题。正如我在下面提到的:我使用lib org.farng.mp3.mp3文件来获取这些信息。为我的目的工作。我没有找到任何其他解决方案。我仍然有同样的问题,仍然得到空值,但奇怪的是,当我使用MediaStore时,我得到了我需要的值。你能看看我的帖子吗?实际上,不同的设备都有奇怪的行为。你在使用哪种设备,哪种android版本?我在我的真实设备上安装了android 9,但我甚至在带有api 21-29的模拟器上进行了尝试,在所有设备上仍然存在相同的问题。MediaMetaDataRetriever为某些键返回null,但我在我链接的帖子中解释的奇怪的事情是,它确实与MediaStore列一起工作,这些列返回MediaMetaDataRetriever键的索引值,所以我真的很困惑为什么MediaStore工作而MediaMetaDataRetriever不工作,因为MediaStore返回的值与MediaMetaDataRetriever相同不同的设备
setDataSource
导致华为手机死机。因此,请注意,此API在不同设备之间不一致。
setDataSource(absoluteFilePath)