代码之家  ›  专栏  ›  技术社区  ›  timothyjc

如何在Android中获得专辑缩略图?

  •  2
  • timothyjc  · 技术社区  · 14 年前

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

    我知道我可以使用以下代码来获得实际的艺术品,但我需要缩略图,因为如果我在列表活动中使用完整图像,我的内存就会不足:

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

    我看到这个帖子: Android media thumbnails. Serious issues? 但是我没有imageId,只有albumid,所以我觉得这没用。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Moncader    14 年前

    获取每一张专辑的艺术,使用Bitmap.createScaledBitmap(),使用它,回收()旧的位图使内存消失,移动到下一个图像。保留一个HashMap或其他东西,以确保您不会两次或多次加载同一张专辑艺术(多个曲目将具有相同的专辑艺术id,请缓存它)。

    应该很管用(为我工作)