6

我使用 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

4

1 回答 1

1

使用 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
    }

参考文档

于 2014-09-03T10:07:53.117 回答