首页 > 解决方案 > MediaMetadataRetriever:尝试使用 url 从 mp3 检索专辑封面时应用程序崩溃

问题描述

我想在这里完成的是当我调用这个方法时:

public void setAlbumArt(int index) {
    android.media.MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.setDataSource(this, Uri.parse(fullsongpath.get(index).Path));

    byte [] data = mmr.getEmbeddedPicture();
    //albumArt is an Imageview object

    // convert the byte array to a bitmap
    if (data != null) {
        Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
        albumArt.setImageBitmap(bitmap); //associated cover art in bitmap
        albumArt.setAdjustViewBounds(true);
        albumArt.setLayoutParams(new LinearLayout.LayoutParams(500, 500));
    } else {
        albumArt.setImageResource(R.mipmap.default_album_art); //any default cover resourse folder
        albumArt.setAdjustViewBounds(true);
        albumArt.setLayoutParams(new LinearLayout.LayoutParams(500,500 ));
    }
}

我的应用程序崩溃,引发错误

java.lang.IllegalArgumentException

这是相册Art ImageView

<ImageView
    android:id="@+id/albumArt"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center_horizontal"
    android:src="@mipmap/default_album_art" />

fullsongpath一个 ArrayList 持有这个对象:

public class SongInfo {

    public  String Path;
    public  String song_name;
    public  String album_name;
    public  String artist_name;

    public  SongInfo(String Path,String song_name,String album_name,String artist_name){
      this.Path=Path;
      this.song_name=song_name;
      this.album_name=album_name;
      this.artist_name=artist_name;
    }
}

路径是 mp3 文件的 URL

我真的不知道是什么导致了这个问题,希望您能提供帮助,将不胜感激。

标签: javaandroidmediametadataretriever

解决方案


试试这样

new Thread(new Runnable() {
              public void run() {
                MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();

                metaRetriever.setDataSource(model.getPostImage(), new HashMap<String, String>());
                // get mp3 info
                byte[] art = metaRetriever.getEmbeddedPicture();
                final Bitmap bm2 = BitmapFactory.decodeByteArray(art, 0, art.length);
                metaRetriever.release();

                holder.postImg.post(new Runnable() {
                  public void run() {
                    holder.postImg.setImageBitmap(bm2);
                  }
                });
              }
            }).start();

推荐阅读