Question

J'ai une liste d'albums que j'ai utilisés:

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;
 }

J'utilise cette liste d'albums dans une listactivité, mais je veux aussi obtenir les miniatures des albums.

Je sais que je peux utiliser le code suivant pour obtenir les illustrations réelles, mais j'ai besoin des miniatures parce que je sors de la mémoire si j'utilise les images complètes dans une activité de liste:

Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri uri = ContentUris.withAppendedId(sArtworkUri, album_id);

J'ai vu ce post:Android Media MigNails. De graves problèmes?Mais je n'ai pas l'imageid, seulement l'albumid, donc je ne pense pas que ça aide.

Était-ce utile?

La solution

Obtenez chaque art de l'album, créez une nouvelle version de celui-ci à l'aide de bitmap.CreateScaledBitmap (), utilisez-le, recyclez () l'ancien bitmap pour faire disparaître la mémoire, passer à l'image suivante. Gardez un hashmap ou quelque chose pour vous assurer que vous ne chargez pas le même album deux fois ou plus (plus d'un morceau aura le même album ID d'art, cachez-le.

Devrait bien fonctionner. (Travaille pour moi)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top