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 - 代码人生与科技生活
评论