从mp3文件获取专辑封面

时间:2018-03-27 14:24:39

标签: android mediastore albumart

我正在创建一个媒体播放器应用程序,它可以从用户手机中获取歌曲及其数据,并将它们添加到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()) ;  

这就是我得到的enter image description here

2 个答案:

答案 0 :(得分:0)

我的建议是忘记BitmapFatcory等,即使你对它进行排序,它也会遇到Out Of Memory错误。我正在使用Glide库。这样可以处理所有事情并且非常容易应用。请看这个链接中的答案

Gilde to manage albumart

答案 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 等中效果很好