任务三 点击歌曲开始播放
任务二已经准备好 MediaPlayer 播放入口。本任务把歌曲列表接入服务,让用户点击歌曲即可开始播放。
一、任务目标
完成后,用户可以:
- 点击列表中的歌曲开始播放。
- 点击没有音频地址的歌曲时,不会发起播放请求。
二、连接歌曲列表点击
1. 编写 playSong
在 Fragment 中添加播放方法,先检查歌曲是否包含音频地址。
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()。
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,点击歌曲即可开始播放。下一任务将把当前歌曲和播放状态显示在播放栏中。