任务三 点击歌曲开始播放

任务二已经准备好 MediaPlayer 播放入口。本任务把歌曲列表接入服务,让用户点击歌曲即可开始播放。

一、任务目标

完成后,用户可以:

  • 点击列表中的歌曲开始播放。
  • 点击没有音频地址的歌曲时,不会发起播放请求。

二、连接歌曲列表点击

1. 编写 playSong

在 Fragment 中添加播放方法,先检查歌曲是否包含音频地址。

app/src/main/java/com/sziit/musicplayer/ui/fragment/MusicListFragment.kt
import com.sziit.musicplayer.model.Song
class MusicListFragment : Fragment() {
// ... 省略已有字段和生命周期方法。
private fun playSong(song: Song) {
// 没有音频地址时不发起播放。
if (song.musicPath.isNullOrEmpty()) return
// 服务绑定后,将歌曲交给 MusicService 播放。
musicService?.play(song)
}
}

服务未完成绑定时 musicService 为空,调用安全结束;绑定成功后,歌曲对象交由服务查找并播放。

2. 设置适配器点击回调

打开 MusicListFragment.kt,将创建适配器时的空回调替换为上一步添加的 playSong()。

app/src/main/java/com/sziit/musicplayer/ui/fragment/MusicListFragment.kt
class MusicListFragment : Fragment() {
// ... 省略已有字段。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// ... 省略 RecyclerView 初始化代码。
adapter = MusicListAdapter(onMusicClick = {}, onMvClick = {})
// 将歌曲条目点击交给 playSong() 处理。
adapter = MusicListAdapter(
onMusicClick = { song -> playSong(song) },
onMvClick = {}
)
// ... 省略 RecyclerView 后续设置代码。
}
}

运行应用并点击一首带有音频地址的歌曲,确认能听到播放声音。此时播放栏仍显示占位内容,歌曲信息和播放图标会在任务四接入。

点击歌曲后开始播放

若没有声音,可检查服务绑定、歌曲是否包含 musicPath、设备音量和网络状态。

任务小结

歌曲列表点击已接入 MusicService,点击歌曲即可开始播放。下一任务将把当前歌曲和播放状态显示在播放栏中。