Как извлечь обложку альбома из файла .mp3 с помощью MediaMetadataRetriever () - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь получить обложку альбома из файла MP3, но следующий код не работает.Всякий раз, когда приложение запускается, оно отображает поле серого цвета (проверьте код в блоке try / catch).

public class MainActivity extends AppCompatActivity {

    MediaMetadataRetriever metaRetriver;
    byte[] art;
    ImageView album_art;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getInit();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

        Cursor cursor = getContentResolver().query(uri, null, null, null, null);


        cursor.moveToFirst();

        String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

        cursor.close();

        metaRetriver = new MediaMetadataRetriever();
        metaRetriver.setDataSource(url);

        try {
            art = metaRetriver.getEmbeddedPicture();

            Bitmap songImage = BitmapFactory
                    .decodeByteArray(art, 0, art.length);

            album_art.setImageBitmap(songImage);

        } catch (Exception e) {
            album_art.setBackgroundColor(Color.GRAY);
        }
    }

    public void getInit() {

        album_art = (ImageView) findViewById(R.id.album_art);

    }

}

Я также пытался использовать курсор для получения обложки альбома, но это не работает.

Ответы [ 2 ]

0 голосов
/ 15 июля 2018

Нет обложки альбома для MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

Вам необходимо использовать Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;

0 голосов
/ 19 мая 2018

Вы получаете NullPointerException

art = metaRetriver.getEmbeddedPicture();

MediaMetadataRetriever document] (https://developer.android.com/reference/android/media/MediaMetadataRetriever#getembeddedpicture):

Вызовите этот метод после setDataSource (). Этот метод находит необязательный графический илиобложка альбома / обложки, связанная с источником данных. Если имеется более одного изображения, (любое) возвращается одно из них.

Возвращается массив байтов null, если не найден, поэтому выперед декодированием нужно проверить на ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...