某项目中需要用到音乐功能,只有音乐还是有一些单调,于是乎想跟音乐播放器一样展示专辑图片,查阅了部分大佬们的代码,总结代码如下:
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
public class MediaUtiles {
private static final Uri albumArtUri = Uri.parse("content://media/external/audio/albumart");
/**
* 从文件当中获取专辑封面位图
*/
public static Bitmap getArtworkFromFile(Context context, long songid, long albumid){
Bitmap bm = null;
if(albumid < 0 && songid < 0) {
throw new IllegalArgumentException("Must specify an album or a song id");
}
try {
BitmapFactory.Options options = new BitmapFactory.Options();
FileDescriptor fd = null;
if(albumid < 0){
Uri uri = Uri.parse("content://media/external/audio/media/"
+ songid + "/albumart");
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
if(pfd != null) {
fd = pfd.getFileDescriptor();
}
} else {
Uri uri = ContentUris.withAppendedId(albumArtUri, albumid);
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
if(pfd != null) {
fd = pfd.getFileDescriptor();
}
}
options.inSampleSize = 1;
// 只进行大小判断
options.inJustDecodeBounds = true;
// 调用此方法得到options得到图片大小
BitmapFactory.decodeFileDescriptor(fd, null, options);
// 我们的目标是在800pixel的画面上显示
// 所以需要调用computeSampleSize得到图片缩放的比例,根据需要开启这一行代码
// options.inSampleSize = 100;
// 我们得到了缩放的比例,现在开始正式读入Bitmap数据
options.inJustDecodeBounds = false;
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
//根据options参数,减少所需要的内存
bm = BitmapFactory.decodeFileDescriptor(fd, null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return bm;
}
}
使用方法 MediaUtiles.getArtworkFromFile(...);
为了更优美的展示,圆形图片也必不可少:
Bitmap bit = MediaUtiles.getArtworkFromFile(getApplicationContext(),mMusicInfos.get(b).songId
,mMusicInfos.get(b).albumId);
RequestOptions options = new RequestOptions().circleCropTransform();
Glide.with(getApplicationContext()).load(bit).apply(options).into(ivArt);
使用Glide前提需要引入依赖;
implementation 'com.github.bumptech.glide:glide:4.10.0'
到此就实现了本地音乐的专辑图片使用,如需要获取本地音乐相关操作,请留言,后续更新本地音乐获取和播放功能。
参考部分文章
https://www.iteye.com/blog/kouriba-1628845
Android开发本地及网络Mp3音乐播放器(五)实现专辑封面图片_iwanghang的博客-CSDN博客_android 获取mp3图片