Как получить миниатюры альбомов на Android?

У меня есть список альбомов, которые я получил, используя это:

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

Я использую этот список альбомов в ListActivity, но я также хочу получить эскизы альбомов.

Я знаю, что могу использовать следующий код, чтобы получить фактическое изображение, но мне нужны миниатюры, потому что я получаю нехватку памяти, если я использую полные изображения в действии списка:

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

Я видел этот пост: Миниатюры для Android. Серьезные проблемы? Но у меня нет imageId, только альбумид, поэтому я не думаю, что это поможет.


person timothyjc    schedule 09.08.2010    source источник
comment
Эй, у меня также возникли проблемы с изменением URI на растровое изображение. Не могли бы вы сказать код, пожалуйста?   -  person Ankit Srivastava    schedule 20.11.2013
comment
Вместо того, чтобы использовать ваши собственные жестко запрограммированные строки для URI, вероятно, лучше сделать запрос следующим образом:   -  person Yoav Feuerstein    schedule 06.12.2018


Ответы (1)


Получите обложку каждого альбома, создайте ее новую версию с помощью Bitmap.createScaledBitmap(), используйте ее, recycle() старое растровое изображение, чтобы освободить память, перейдите к следующему изображению. Сохраните HashMap или что-то еще, чтобы убедиться, что вы не загружаете одно и то же обложку альбома дважды или более (более одного трека будет иметь один и тот же идентификатор обложки альбома, кэшируйте его.

Должно работать хорошо. (Работает на меня)

person Moncader    schedule 09.08.2010
comment
Это был подход, который я выбрал, но я думаю, что для обложек альбомов также есть URI: content://media/external/audio/albumart_thumb. На самом деле я застрял на записи растровых изображений в URI content://media/external/audio/albumart на данный момент. Я получаю FileNotFoundExceptions, когда использую этот код: Uri artworkUri = Uri.parse(content://media/external/audio/albumart); Uri uri = ContentUris.withAppendedId(artworkUri, Album.getId()); OutputStream outStream = getContentResolver().openOutputStream(uri); bmp.compress(Bitmap.CompressFormat.JPEG, 50, outStream); - person timothyjc; 10.08.2010
comment
О, я понял, что часть написания обложки альбома находится здесь: netmite.com/android/mydroid/packages/apps/Music/src/com/android/ - person timothyjc; 10.08.2010
comment
Эй, у меня также возникли проблемы с изменением URI на растровое изображение. Не могли бы вы сказать код, пожалуйста? - person Ankit Srivastava; 20.11.2013