3

我有一张我用这个得到的专辑列表:

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,只有albuid,所以我认为它没有帮助。

4

1 回答 1

4

获取每个专辑封面,使用 Bitmap.createScaledBitmap() 创建它的新版本,使用它,recycle() 旧位图以使内存消失,移动到下一张图像。保留一个 HashMap 或其他东西,以确保您不会两次或多次加载相同的专辑封面(多个曲目将具有相同的专辑封面 ID,缓存它。

应该运作良好。(为我工作)

于 2010-08-09T14:40:45.773 回答