Получение обложки альбома из 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. Это заботится обо всем и очень легко наносится. Посмотрите на мой ответ в этой ссылке
Я сделал это вот так ...
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 и т. д.