Pregunta

Tengo una lista de álbumes que tengo usando esto:

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

Utilizo esta lista de álbumes en un listactivity, pero también quiero obtener las miniaturas de los álbumes.

Sé que puedo usar el siguiente código para obtener la obra de arte real, pero necesito las miniaturas porque me salgo de la memoria si uso las imágenes completas en una actividad de la lista:

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

Vi esta publicación:Miniaturas de Media Android. ¿Serios problemas?Pero no tengo el ImageId, solo el álbumid, así que no creo que ayude.

¿Fue útil?

Solución

Obtenga cada álbum, cree una nueva versión utilizando bitmap.createScaledBitMap (), use eso, recycle () el antiguo mapa de bits para hacer que la memoria desaparezca, pase a la siguiente imagen. Mantenga un hashmap o algo para asegurarse de no cargar el mismo álbum CAT dos veces o más (más de una pista tendrá la misma identificación del álbum, caché.

Debería funcionar bien. (Funciona para mi)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top