我一直试图在我的歌曲列表中包含音频文件的缩略图。但是经过几次尝试,我未能做到这一点。我不知道该如何执行。有什么简单的方法来获取音频文件的缩略图?我在下面提供了我实际上正在寻找的示例图片。
private class MediaCursorAdapter extends SimpleCursorAdapter {
MediaCursorAdapter(Context context, int layout, Cursor c) {
super(context, layout, c, new String[]{MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ALBUM_ID},
new int[]{R.id.title, R.id.displayname, R.id.thumbnail});
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView title = view.findViewById(R.id.title);
TextView name = view.findViewById(R.id.displayname);
ImageView thumbnail = view.findViewById(R.id.thumbnail);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
byte[] rawArt;
Bitmap art = null;
BitmapFactory.Options bfo=new BitmapFactory.Options();
mmr.setDataSource(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID)));
rawArt = mmr.getEmbeddedPicture();
if (null != rawArt)
art = BitmapFactory.decodeByteArray(rawArt, 0, rawArt.length, bfo);
thumbnail.setImageBitmap(art);
name.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)));
title.setText(cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)));
view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.song_list, parent, false);
bindView(v, context, cursor);
return v;
}
}
答案 0 :(得分:0)
This是获取音频文件缩略图的方式。如果返回null值,则表示音频没有图像。您还可以为音频设置默认的缩略图图标,或将可绘制对象中的资源用作默认资源。
答案 1 :(得分:0)
您应该查看此帖子,看看它是否对 How can I display Album Art using MediaStore.Audio.Albums.ALBUM_ART? 有帮助,并确认您的自定义列表视图适配器工作正常