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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top