You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Glide加载媒体的专辑封面?

如何使用Glide加载媒体的专辑封面?

嘿,我看你遇到的问题根源其实是把歌曲ID和专辑ID搞混了!你现在用的是歌曲的ID(songList[position].id)去拼接专辑封面的Uri,但content://media/external/audio/albumart这个Uri对应的是专辑ID,不是歌曲的ID,所以肯定加载不出来~ 另外Glide确实没有loadFromMediaStore()这个方法,你应该是记错啦。

下面给你一步步讲正确的做法:

1. 先确保你的歌曲数据包含专辑ID

首先你在查询MediaStore获取歌曲列表的时候,一定要把MediaStore.Audio.Media.ALBUM_ID这个字段也查出来,存到你的歌曲对象里。比如你的歌曲数据类可以加个albumId属性:

data class Song(
    val id: Long, // 歌曲ID
    val path: String, // 歌曲路径
    val albumId: Long // 新增专辑ID字段
)

查询MediaStore的示例代码(简化版):

val projection = arrayOf(
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.ALBUM_ID // 必须包含这个字段
)

contentResolver.query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
    projection,
    null,
    null,
    null
)?.use { cursor ->
    while (cursor.moveToNext()) {
        val songId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))
        val songPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA))
        val albumId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))
        
        songList.add(Song(songId, songPath, albumId))
    }
}

2. 用专辑ID构建正确的封面Uri

拿到歌曲对应的专辑ID后,再去拼接专辑封面的Uri:

val artworkUri = Uri.parse("content://media/external/audio/albumart")
// 这里用的是专辑ID,不是歌曲ID!
val albumArtUri = ContentUris.withAppendedId(artworkUri, songList[position].albumId)

3. 用Glide加载封面并处理异常

最后用Glide加载这个Uri,记得加上占位图和错误图——毕竟有些歌曲可能没有专辑封面,避免ImageView显示空白:

Glide.with(holder.songCover.context)
    .load(albumArtUri)
    .placeholder(R.drawable.your_default_cover) // 加载时显示的占位图
    .error(R.drawable.your_default_cover) // 加载失败时显示的图
    .into(holder.songCover)

这样应该就能正常加载专辑封面啦!

备注:内容来源于stack exchange,提问作者Mizuki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:29:34