Como faço para obter miniaturas de álbuns no Android?
-
27-09-2019 - |
Pergunta
Eu tenho uma lista de álbuns que obtive usando isso:
private List<Album> getAlbums() {
Cursor cur = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
List<Album> albums = new ArrayList<Album>();
if (cur.moveToFirst()) {
do {
int albumIdIndex = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
int albumIndex = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
int artistIndex = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int albumId = cur.getInt(albumIdIndex);
String name = cur.getString(albumIndex);
String artist = cur.getString(artistIndex);
LogUtil.i(TAG, "albumid= " + albumId + ", album= " + name + ", artist=" + artist);
Album album = new Album(albumId, name, artist);
if (!albums.contains(album)) {
albums.add(album);
}
} while (cur.moveToNext());
}
return albums;
}
Eu uso esta lista de álbuns em uma listatividade, mas também quero obter as miniaturas dos álbuns.
Sei que posso usar o código a seguir para obter a obra de arte real, mas preciso das miniaturas porque saio da memória se usar as imagens completas em uma atividade de lista:
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);
Eu vi este post:Android Media Miniaturas. Problemas sérios?Mas eu não tenho o ImageID, apenas o álbumid, então acho que não ajuda.
Solução
Obtenha cada álbum Art, crie uma nova versão usando bitmap.createscaledbitmap (), use isso, recicle () o bitmap antigo para fazer a memória desaparecer, vá para a próxima imagem. Mantenha um hashmap ou algo para garantir que você não carregue a mesma arte do álbum duas ou mais (mais de uma faixa terá o mesmo álbum Art ID, cache.
Deve funcionar bem. (Funciona para mim)