概述

Android 5.0(Lolippop)更新了新的媒体播放API媒体类型通知,使用最新的 API 可以让系统界面能够读取你的媒体播放并提取和显示专辑封面。比如在 Lolippop 上,播放音乐时锁屏界面背景会变成专辑封面,并且还有播放控制按钮。

Lolippop 之前是使用RemoteControlClient来实现跨界面的播放,新版被 **MediaSession** 所替代,并且提供了一系列用于处理传输控件和媒体按钮的回调方法,可以让你的媒体播放在Android TVWear平台上运行。

实际测试 Lolippop 的锁屏兼容了RemoteControlClientMediaSession两种方式,都可以在锁屏控制媒体播放并提取和显示专辑封面。

大致流程

如下图所示,红色的部分为自己需要实现的类,方框内即 Android 5.0 的媒体控制大致流程。

抛开每个类要如何实例化不谈,单从用户播放流程来说:

  1. 通过Activity有个getMediaController()方法可以拿到MediaController对象
  2. 通过MediaController拿到TransportControler对象
  3. 通过TransportControler发送play()的指令
  4. MediaSession.Callback收到指令回调onPlay()方法
  5. 播放音乐,设置MediaSession现在的播放状态
  6. MediaController.Callback收到状态改变
  7. 刷新 UI 界面

类的实例化和关联:
创建MediaController,指定一个MediaSession.Token,这样就和该MediaSession绑定好啦。

1
2
3
MediaSession mediaSession = new MediaSession(context, "MyMediaSession");

MediaController mediaController = new mediaController(context, mediaSession.getSessionToken());

关键类

关于音乐播放器

在没自己去写音乐播放器的时候,觉得音乐播放器很简单,无非就是用MediaPlayer播放一个文件而已嘛,深入后发现要写好一个播放器其实也没那么简单的,Android 5.0 更新的 API 让音乐播放流程和代码架构更加清晰,推荐大家都基于 MediaSession 开发。