MediaMetadataRetriever:尝试使用url

时间:2018-07-13 23:33:46

标签: java android mediametadataretriever

我要在这里完成的是,当我调用此方法时:

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

这是AlbumArt 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文件的网址

我真的不知道是什么引起了这个问题,希望您能提供帮助,

2 个答案:

答案 0 :(得分:0)

尝试这样,

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();

答案 1 :(得分:-1)

不知道您是如何填充PATH的,但是我怀疑您使用了MediaStore.Audio.Media.EXTERNAL_CONTENT_URI

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI没有专辑封面

在这种情况下,您需要使用MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI