Domanda

Ho un elenco di album che ho avuto usando questo:

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

Uso questo elenco di album in un elenco, ma voglio anche ottenere le miniature degli album.

So di poter usare il seguente codice per ottenere le opere d'arte reali, ma ho bisogno delle miniature perché esco dalla memoria se utilizzo le immagini complete in un'attività di elenco:

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

Ho visto questo post:Miniature dei media Android. Problemi seri?Ma non ho l'immagine IMIDID, solo l'albumid, quindi non penso che aiuti.

È stato utile?

Soluzione

Ottieni ogni album arte, crea una nuova versione usando bitmap.createscaledbitmap (), usalo, ricycle () La vecchia bitmap per far andare via la memoria, passare all'immagine successiva. Mantieni un hashmap o qualcosa per assicurarti di non caricare lo stesso album arte due o più (più di una traccia avrà lo stesso album art ID, memorizzarlo nella cache.

Dovrebbe funzionare bene. (Per me va bene)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top