如何在android中显示音频文件的缩略图



我一直在尝试将音频文件的缩略图放在我的歌曲列表中。但经过几次尝试,我都没能做到。我不知道如何实现这一点。有什么简单的方法可以得到音频文件的缩略图吗?我已经给出了下面的样本图片,我实际上是在寻找。

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;
}
}

音频缩略图

这就是获取音频文件缩略图的方法。如果返回null值,则表示音频没有图像。您也可以设置音频的默认缩略图图标,或者使用绘图中的资源作为默认图标。

你应该看看这篇文章,看看它是否有帮助我如何使用MediaStore.Audio.Albums.Album_Art显示专辑艺术确认您的自定义列表视图适配器工作正常吗

信贷流向[Ashish Pedhadiya](https://stackoverflow.com/questions/23265502/getting-album-art-for-music-player-android#:~:text=9-,尝试%20following%3A,-MediaMetadataRetriever%20mmr%20%3D%20new(

我们向MidiaMetaDataRetriver提供文件绝对值,并从中获取位图。

MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(file.getPath());
byte [] data = mmr.getEmbeddedPicture();
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
imageView.setImageBitmap(bitmap);

最新更新