我有一张专辑列表,我使用了此信息:

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,只有专用型,所以我认为这无济于事。

有帮助吗?

解决方案

获取每张专辑艺术,使用bitmap.createscaledbitmap()创建一个新版本,使用它,recycle()旧的位图使内存消失,转到下一个图像。保留一个hashmap或一些东西以确保您不会两次或更多地加载相同的专辑艺术(一个以上的曲目将具有相同的专辑art ID,CACHE IT。

应该效果很好。 (为我工作)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top