我正在尝试获取 MP3 文件的专辑封面。我认为最好、最干净的方法是使用 MediaMetadataRetriever 类。但由于某种原因,调用 getEmbeddedPicture 方法不起作用。图像未显示,LogCat 显示错误:
04-29 18:36:19.520: E/MediaMetadataRetrieverJNI(25661): getEmbeddedPicture: Call to getEmbeddedPicture failed.
这是似乎不起作用的代码:
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
MediaMetadataRetriever mmdr = new MediaMetadataRetriever();
mmdr.setDataSource(path); //path of the MP3 file on SD Card
bites = mmdr.getEmbeddedPicture();
if(bites != null)
artBM = BitmapFactory.decodeByteArray(bites, 0, bites.length);
return null;
}
我在 Android 4.2 的设备上运行它,因此 MediaMetadataRetriever(需要 api lvl 10)不应该有任何问题。我测试的文件在 Windows 资源管理器中显示图像,因此似乎嵌入了艺术。有人对此有什么想法吗?
并非所有 MP3 文件都嵌入了专辑封面,对于某些专辑,专辑封面位于专辑文件夹内,因此您可以看到该文件夹内所有文件的专辑封面,
But
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(mp3_file_path);
如果专辑封面嵌入在该文件中,这将获取专辑封面,因此为未嵌入专辑封面的文件设置默认图像作为专辑封面,并检查返回的 byte[] 是否为空,
如果 byte[] 不为空,则检索专辑封面,如果为空,则设置默认专辑封面图像
在我的项目中我使用这个
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(songsList.get(index).get("songPath"));
byte[] artBytes = mmr.getEmbeddedPicture();
if(artBytes != null)
{
InputStream is = new ByteArrayInputStream(mmr.getEmbeddedPicture());
Bitmap bm = BitmapFactory.decodeStream(is);
imgArt.setImageBitmap(bm);
}
else
{
imgArt.setImageDrawable(getResources().getDrawable(R.drawable.adele));
}
我希望这能帮到您
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)