如何在Android中获取相册缩略图?

时间:2010-08-09 09:41:22

标签: android thumbnails albumart

我有一张专辑清单:

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 media thumbnails. Serious issues? 但我没有imageId,只有albumid,所以我觉得它没有用。

1 个答案:

答案 0 :(得分:4)

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

应该运作良好。 (适合我)