Получение обложки альбома из mp3 файла

Я создаю приложение Media Player, которое получает песни и их данные с телефона пользователя и добавляет их в ArrayList. Я читаю данные с помощью курсоров, и я застрял на обложке альбома. Код, который я использую ниже, не приводит к сбою приложения, и даже если у mp3-файлов, хранящихся на моем устройстве, есть обложка альбома, я не могу их получить. Может использовать некоторую помощь

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()) ;  

это то, что я получаю введите описание изображения здесь

2 ответа

Мое предложение состоит в том, чтобы забыть о BitmapFatcory и т. Д., Даже если вы его отсортируете, он столкнется с ошибками нехватки памяти. Я использую библиотеку Glide. Это заботится обо всем и очень легко наносится. Посмотрите на мой ответ в этой ссылке

Gilde для управления albumart

Я сделал это вот так ...

      
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 и т. д.

Другие вопросы по тегам