Android 2.2 和 2.3 中的 MediaMetadataRetriever

Posted

技术标签:

【中文标题】Android 2.2 和 2.3 中的 MediaMetadataRetriever【英文标题】:MediaMetadataRetriever in Android 2.2 and 2.3 【发布时间】:2012-03-31 14:27:13 【问题描述】:

我想使用 MediaMetadataRetriever 来显示 URL 音乐的封面。 在 android 2.2 中,我尝试下面的代码,它可以工作,但在 Android 2.3.3 中不行。

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(url);
byte[] cover_array = mmr.extractAlbumArt();
cover = BitmapFactory.decodeByteArray(cover_array, 0, cover_array.length);

在 Android 2.3.3 中,我尝试下面的代码,它可以工作,但在 Android 2.2 中不行。

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(url);
byte[] cover_array = mmr.getEmbeddedPicture();
cover = BitmapFactory.decodeByteArray(cover_array, 0, cover_array.length);

getEmbeddedPicture() 在 Android 2.2 中将编译失败。 extractAlbumArt() 将在 Android 2.3.3 中编译失败。 我想同时修复 Android 2.2 和 2.3.3。 我该怎么做?

【问题讨论】:

【参考方案1】:

尽管有文档,但根据我自己的测试和我在网上阅读的内容,它实际上在 2.2 中运行良好。

据我所知,它实际上也适用于旧版本的 Android,只是没有记录。

我不知道为什么 Android 文档说它是在 API 级别 10 (Gingerbread MR1) 中添加的...我怀疑可能是它被添加到文档中的时候?

【讨论】:

@lorne 和 nLL:如何在我在 OS 2.2 上编译的项目中导入 MediaMetadataRetriever? 导入android.media.MediaMetadataRetriever;【参考方案2】:

是的,你不能在 2.2 中使用它,因为 MediaMetadataRetriever 类是从 api 级别 10 开始(在 2.3.3 或更高版本中工作)

请看这里:

Further for more Detail

【讨论】:

【参考方案3】:

为什么不在运行时检查操作系统build version 并使用简单的 if/then 来决定调用哪个方法?

【讨论】:

以上是关于Android 2.2 和 2.3 中的 MediaMetadataRetriever的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 2.2 但不适用于 Android 2.3

SingleClientConnManager 的无效使用在 Android 2.2,2.3 中发生,但在 4.1 中没有

Android 版本 > 2.3 上的 FileNotFoundException

android studio 2.3 即时运行不工作

安卓系统版本的高低有啥区别

安卓android手机怎么刷Recovery