MediaBrowserCompat MediaBrowserServiceCompat
学习代码参考:
googlesamples/android-MediaBrowserService
我的源码注释与简单代码修改:
AndroidHighQualityCodeStudy/android-GoogleSample-MediaBrowserService
MediaBrowserCompat
与MediaBrowserServiceCompat
为Android Support Library 23.2新增API,为一套CS架构的媒体播放框架。
- MediaBrowserServiceCompat继承字Service,为运行在后台的音频服务。
- MediaBrowserCompat 运行与前台,通过MediaSessionCompat与MediaBrowserServiceCompat建立连接,从而获取到一个MediaControllerCompat用于控制前台音频播放。
- MediaControllerCompat UI界面控制音频播放进度、播放速度、上一曲、下一曲音频播放等等。
- MediaSessionCompat 运行于后台的MediaBrowserServiceCompat与运行于前台的MediaBrowserCompat通过MediaSessionCompat来建立连接。
- MediaSessionCompat.Callback 用户通过MediaControllerCompat对UI的操作,会通过MediaSessionCompat.Callback 回调到Service端,来操纵“播放器”进行播放、暂定、快进、上一曲、下一曲等操作
- MediaControllerCompat.Callback Service端播放器播放完成、播放下一曲等操作,通过MediaControllerCompat.Callback回调到UI页面,操纵UI的变化。
因此 MediaBrowserCompat
与MediaBrowserServiceCompat
仅为一套CS架构的播放框架,其对应的播放器,既可以为系统播放器MediaPlayer
亦可以为其他自定义的播放器 XXXMediaPlayer
。
关于MediaBrowserService官方demo中这样写道
- Set a MediaSession.Callback class on the MediaSession. The callback class will receive all the user’s actions, like play, pause, etc; 用户的UI操作,最终通过MediaSession.Callback回调到Service端
- Handle all the actual music playing using any method your app prefers (for example, the Android MediaPlayer class) MediaBrowserService可以控制任意播放器播放,例:MediaPlayer
- Whenever it changes, update info about the playing item and the playing queue using MediaSession corresponding methods (setMetadata, setPlaybackState, setQueue, setQueueTitle, etc) 这里通过阅读源码得知(setMetadata, setPlaybackState, setQueue, setQueueTitle, etc) 这些方法最终回调到了Client端的MediaControllerCompat.Callback方法。
- Handle AudioManager focus change events and react appropriately (e.g. pause when audio focus is lost) 音频焦点变化的管理
MediaSession架构
来自https://github.com/kevinshine/android-UniversalMusicPlayer-Analysis
的MediaSession架构图
官方demo android-MediaBrowserService的架构图
[外链图片转存中…(img-LcVIW6WF-1574931919759)]
源码阅读,可以参考我的注释demo
AndroidHighQualityCodeStudy/android-GoogleSample-MediaBrowserService