音乐播放对接状态栏MediaSession控制
音乐播放对接状态栏MediaSession控制
文章目录
- 音乐播放对接状态栏MediaSession控制
- MediaPlayer播放音源
- 使用ExoPlayer播放音频
- Exopler 缓存配置
- 总结
本文首发地址 https://h89.cn/archives/364.html
MediaPlayer播放音源
MediaPlayer
可以播放视频,也可以播放视频,下面是一个使用MediaPlayer
播放音频的示例
fun playMp3FromUrl(url: String) {val mediaPlayer = MediaPlayer()try {// 1. 设置数据源mediaPlayer.setDataSource(url)// 2. 异步准备播放器mediaPlayer.prepareAsync()// 3. 监听准备完成事件mediaPlayer.setOnPreparedListener { mp ->// 4. 准备完成后开始播放mp.start()}// 5. 监听播放错误mediaPlayer.setOnErrorListener { mp, what, extra ->// 处理错误,例如网络问题、文件不存在等println("播放错误:what=$what, extra=$extra")false // 返回 false 表示你没有处理完错误,让系统继续处理}//6. 监听播放结束mediaPlayer.setOnCompletionListener { mp->// 播放结束println("播放完成")}} catch (e: IOException) {// 处理 IOException,例如无效的 URLprintln("IO 错误:${e.message}")}
}
如果要想实现在通知栏显示以及控制播放,如下图,我们得自己实现自定义通知栏,处理控制事件
如果我们想让下拉状态栏,可以控制音频播放,实现下图效果
我们就需要对接 MediaSession
,可以参考如下代码实现
private lateinit var mediaSession: MediaSessionprivate fun setupMediaSession(context:Context) {mediaSession = MediaSession(this, "MusicService")mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS or MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS)val audioAttributes = AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).setUsage(AudioAttributes.USAGE_MEDIA)