Android MediaSession框架简析
时间:2020-09-06 10:09:55 点击:905次
一、简介
二、应用
1. 音频播放
2. 视频播放
三、原理
1. 核心成员类
MediaBrowserCompat:媒体浏览器,客户端类。用于连接MediaBrowserServiceCompat和订阅媒体数据,在回调了连接成功的方法后,通过获取的token得到MediaControllerCompat对象。
MediaBrowserServiceCompat:浏览器服务,服务端类。作为承载实际的播放器和MediaSessionCompat的容器,一般在onCreate()方法中,用setSessionToken(...)来设置token。在重写的onGetRoot(…)方法中判断是否允许连接,在onLoadChildren(…)方法中处理订阅信息。
MediaControllerCompat:媒体控制器,客户端类。可以通过getMetadata()的方式主动获取媒体信息,也可以通过getTransportControls().xxx()的方式发送控制指令,在MediaControllerCompat.Callback中接收媒体的状态,从而刷新界面UI。
MediaSessionCompat:媒体会话,服务端类。通过MediaSessionCompat.Callback来接收MediaControllerCompat发送的指令,然后调用实际的播放器执行相应的操作,如播放、暂停等。在媒体信息或状态发生变化后,通过setMetadata(mediaMetadata)的方式通知客户端,即MediaControllerCompat.Callback中的onMetadataChanged(metadata)方法 。
2. 辅助成员类
PlaybackStateCompat: 播放状态类。封装了媒体的各类状态信息,主要是: 状态、进度。
MediaMetadataCompat: 构建媒体信息类。主要是:标题、作者、专辑名、总时长等。注意与MediaSessionCompat.QueueItem、MediaBrowserCompat.MediaItem之间的差异。
MediaDescriptionCompat: 解析媒体信息类。与MediaMetadataCompat的作用相对应。
3. 连接订阅
4. 数据加载
5. 媒体控制