Android 5.0(L) 的MediaSession架构分析

Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型,下面是它的架构图:


Android 5.0(L) 的MediaSession架构分析_第1张图片


 其架构主要分为3大部分:

1. 受控端(播放器):

播放器需要创建MediaSession,创建的时候就类似于在系统注册了它,并告诉系统它可以被其他控制端所控制。

2. framework(中介):

受控端创建MediaSession以后都会登记在framework中,framework同时会记录所有的MediaSession,并向控制端提供查询及状态更新服务。

3.控制端(播放状态显示及控制):

控制端实现方式可以多种多样,可以在另外一个app里实现,也可以在系统ui里实现,它主要通过framework的MediaSessionManager来查询系统中的session并根据自己的需要来选择要控制的session,并能要求系统在session发生变化的时候通知自己。


实现方式:

1. 受控端(播放器):

受控端主要需要实现媒体的播放,这个和之前的没有区别,其次需要创建MediaSession,创建的时候需要设置唯一的session标识符,这样控制端可以根据该标识符来确定控制的session。然后需要实现的是session的回调方法(SessionCallback),该回调方法中定义了媒体播放的常见操作,play、pause、next、previous等,在创建session时需要把该callback设置到session中,并实现收到回调的处理办法,比如onPlay的时候就启动本地的播放器进行播放,onPause的时候就暂停。同时需要把播放器的状态通过session设置到控制端,MediaSession提供专门的方法setPlaybackState和setMetadata来更新本地播放器的状态和信息到控制端。


2. 控制端:

控制端需要先通过系统服务取得MediaSessionManager,然后查询系统中的Session,并根据自己的需求确定要控制的session实例,比如根据标识符或者包名来确认。取得session以后需要完成两件事,一是取得该session的MediaControl,该control用于控制播放器执行具体的操作,比如调用MediaControl的play方法将最终由系统执行播放器的callback里的onPlay;二是需要向该session注册自己的callback,该callback在播放器状态发生变化时会被调用以通知控制端播放器的状态及数据(媒体名、进度等等)。


3. 一个简单的受控端与控制端示例:

(待续)

你可能感兴趣的:(android,android5.0,Mediasession)