自从我将Galaxy S2升级到Android 4后,我的音频播放器应用程序出现了一些奇怪的问题。 由于升级MediaMetadataRetriever不会输出除轨道号和嵌入图片之外的其他信息。没有标题,没有艺术家,几乎没有。
我目前处于亏损状态,因为Android 4.0.3仿真器没有出现同样的问题,这个问题变得更糟。
虽然我发现很难想象我会是唯一一个有这种问题的人,但谷歌搜索这并没有多大帮助。我妻子的SGS2显示了同样的问题,所以我不认为这是一个仅限于我手机的奇怪问题。 有人知道这可能是SGS2限于ICS的问题吗? 在ICS上有没有其他人遇到过MediaMetadataRetriever的问题? 而且,我猜最重要的是,有人有解决方案吗?如果您想检查我的应用程序是否在您的手机上出现此问题,您可以在http://www.sourceforge.net/projects/andrstoryteller
获取代码或APK关于我如何能够追踪问题的任何一般性建议也会有所帮助。
答案 0 :(得分:3)
我会在有片刻时测试您的示例应用程序,但与此同时您可能还想考虑除MediaMetadataRetriever之外的其他解决方案,因为它限制了您的API兼容性并且(显然)并不总是有效。我的项目ServeStream使用Apache Tika的精简版本来检索元数据。您可能希望在自己的项目中考虑这种方法。这是Tika jar的URL和进行解析的类:
http://servestream.svn.sourceforge.net/viewvc/servestream/trunk/lib/tika-app-1.0.jar?view=log http://servestream.svn.sourceforge.net/viewvc/servestream/trunk/src/net/sourceforge/servestream/utils/MetadataRetriever.java?revision=1033&view=markup
答案 1 :(得分:3)
我在ICS上注意到了同样的问题(On Galaxy SII和Galaxy Tab II都在运行ICS 4.0.3)。 这似乎只影响mp3。
我想威廉建议的其中一个解决方案就是使用外部库,但我也更喜欢使用android而不是外部库。
令我感到困扰的是,除了这个问题之外,我找不到其他报道相同问题的帖子。虽然,我认为我做错了:
我尝试了两种解决方案:
MediaMetadataRetriever mmdr = new MediaMetadataRetriever();
mmdr.setDataSource(path);
String title = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
和
File file = new File(path);
FileInputStream inputStream;
inputStream = new FileInputStream(file);
mmdr = new MediaMetadataRetriever();
mmdr.setDataSource(inputStream.getFD());
inputStream.close();
String title = mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
MediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)始终返回null。
路径正确,mp3文件的ID3标签带有标题和所有内容。
我认为除了使用外部库之外的解决方案是在文件路径上查询MediaStore:
Cursor c = mContext.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[] {MediaStore.MediaColumns.TITLE},
MediaStore.MediaColumns.DATA + "=?",
new String[] { path }, null);
String title;
if(c!=null && c.moveToFirst())
title = c.getString(c.getColumnIndex(MediaStore.MediaColumns.TITLE))
}
如果MediaScanner扫描它(它应该有),信息应该在那里。这也适用于10级之前的API级别。
基本上,我在我的项目中做的是:如果SDK版本是< 10或文件的扩展名为mp3,SDK版本为15,我查询MediaStore,否则我使用MediaMetaDataRetriever。
答案 2 :(得分:1)
有关情况的一点点更新。 我刚把几个Ogg / Vorbis文件放到我的手机上,它可以正确读取标签。 将不得不测试更多的文件,但也许这只是停止工作的MP3文件。 如果我能让更多的人用ICS手机测试这个,那会很酷。 无论如何,我目前正在研究另一种获取此信息的方法,因此我可能不会长时间使用MediaMetadataRetriever。