我正在创建一个媒体播放器应用程序,它可以从用户手机中获取歌曲及其数据,并将它们添加到ArrayList中。我正在通过游标阅读数据,而且我有点卡在相册艺术中。我在下面使用的代码不会使应用程序崩溃,即使存储在我的设备中的mp3具有专辑封面,我也无法获得它们。 COuld使用了一些帮助
Cursor imgCursor = getContentResolver().query(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,
new String[]{MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ALBUM_ART},
MediaStore.Audio.Albums._ID + "=?",
new String[]{String.valueOf(MediaStore.Audio.Albums._ID)},
null);
do{
if (imgCursor.moveToFirst()) {
String imgPath = imgCursor.getString(imgCursor.getColumnIndex(MediaStore.Audio.Albums.ALBUM_ART));
Log.v("Musiclistactivity", "img path is" + imgPath);
currentImage = BitmapFactory.decodeFile(imgPath);
} else {
currentImage = BitmapFactory.decodeResource(getResources(), R.drawable.nocover);
}}while (imgCursor.moveToNext()) ;
答案 0 :(得分:0)
我的建议是忘记BitmapFatcory等,即使你对它进行排序,它也会遇到Out Of Memory错误。我正在使用Glide库。这样可以处理所有事情并且非常容易应用。请看这个链接中的答案
答案 1 :(得分:0)
我是这样处理的...
Glide.with(imageView.getContext())
.load(getSongCover(file.getPath()))
.placeholder(R.drawable.audio_placeholder)
.error(R.drawable.audio_placeholder)
.dontAnimate()
.into(imageView);
public byte[] getSongCover(String path) {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
return mmr.getEmbeddedPicture();
}
将其添加到您的 build.gradle
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
在 recyclerview、listview 等中效果很好