java - 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
我真的不知道是什么导致了这个问题,希望您能提供帮助,将不胜感激。
解决方案
试试这样
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();
推荐阅读
- docker - 如何为已经使用 Nginx 运行 docker-compose 设置 certbot 证书?
- javascript - context.fillReact 不是函数
- python - 在 tkinter 中恢复输入以前的会话属性
- python - 使用 Onnx 转换 Sklearn 决策树后,有没有办法得到每个样本被预测为的叶子的索引?
- cvat - 如何从 CVAT 中的任务中删除作业
- angular - 如何配置 Spring Security 以避免 405 Method Not Allowed for PUT request from Angular?
- c - 按小数位对齐不同的数字长度浮动
- python - MAYA:对重复元素的父项进行编号
- c++ - C++中对象之间的相互引用
- java - 试图克隆 ArrayList 但我收到警告