有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java MediaMetadataRetrieverJNI:getEmbeddedPicture失败

我在使用安卓,我在几百个媒体文件上迭代,以找到第一张嵌入的图片,效果很好,但在我的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


共 (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
        }
    

    请参阅docs