我使用 android 并迭代数百个媒体文件以找到第一个嵌入图片,效果很好,但在我的 logcat 中发送了很多错误。
我正在使用这段代码:
for (String s : ArrayList <String> paths){
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
byte[] data = mmr.getEmbeddedPicture();
if (data != null) {
...
}
它记录的错误是:
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
E/MediaMetadataRetrieverJNI﹕ getEmbeddedPicture: Call to getEmbeddedPicture failed.
.....
我用对了吗?如果可以,我可以抑制错误,这会使调试变得烦人。
根据MediaMetadataRetriever它应该简单地返回 null
最佳答案
使用 getEmbeddedPicture 是不够的,您需要为此添加一些代码。
试试这个
md.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.your_default_image));
}
再看看这个:
try {
byte [] art = md.getEmbeddedPicture();
Bitmap songImage = BitmapFactory
.decodeByteArray(art, 0, art.length);
md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
String artist =md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
String genre = md.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE));
} catch (Exception e) {
// TO-DO Exception
}
引用docs
关于java - 媒体元数据检索器 JNI : getEmbeddedPicture failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25367292/