Android | 基于 MediaSession 的音乐播放流程
概述
Android 5.0(Lolippop)更新了新的媒体播放API和媒体类型通知,使用最新的 API 可以让系统界面能够读取你的媒体播放并提取和显示专辑封面。比如在 Lolippop 上,播放音乐时锁屏界面背景会变成专辑封面,并且还有播放控制按钮。
Lolippop 之前是使用RemoteControlClient来实现跨界面的播放,新版被 **MediaSession** 所替代,并且提供了一系列用于处理传输控件和媒体按钮的回调方法,可以让你的媒体播放在Android TV或Wear平台上运行。
实际测试 Lolippop 的锁屏兼容了RemoteControlClient和MediaSession两种方式,都可以在锁屏控制媒体播放并提取和显示专辑封面。
大致流程
如下图所示,红色的部分为自己需要实现的类,方框内即 Android 5.0 的媒体控制大致流程。

抛开每个类要如何实例化不谈,单从用户播放流程来说:
- 通过
Activity有个getMediaController()方法可以拿到MediaController对象 - 通过
MediaController拿到TransportControler对象 - 通过
TransportControler发送play()的指令 MediaSession.Callback收到指令回调onPlay()方法- 播放音乐,设置
MediaSession现在的播放状态 MediaController.Callback收到状态改变- 刷新 UI 界面
类的实例化和关联:
创建MediaController,指定一个MediaSession.Token,这样就和该MediaSession绑定好啦。
1 | MediaSession mediaSession = new MediaSession(context, "MyMediaSession"); |
关键类

关于音乐播放器
在没自己去写音乐播放器的时候,觉得音乐播放器很简单,无非就是用MediaPlayer播放一个文件而已嘛,深入后发现要写好一个播放器其实也没那么简单的,Android 5.0 更新的 API 让音乐播放流程和代码架构更加清晰,推荐大家都基于 MediaSession 开发。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Gavin Liu - 代码人生与科技生活
评论