Google官方在Android 5.0 引入的媒体应用框架,
分为媒体控制器(UI)和媒体会话(播放器),目的是为了解耦UI和播放器。
媒体会话(MediaSession)
媒体会话负责与播放器的所有通信,包括播放、暂停、快进等等。对UI隐藏播放器API,UI只能通过控制器(MediaController)与会话(MediaSession)交互。 会话维护播放器所有状态以及内容信息,会话可以接收多个媒体控制器的连接调用。因此,除界面调用外,运行Wear OS和Android Auto的设备也能控制播放器。
媒体控制器(MediaController)
界面代码只与媒体控制器通信,传输和接收媒体会话的回调。媒体控制器一次只能连接到一个媒体会话。
视频播放
由于播放视频一般都是眼耳同时参与,很少有界面或者应用的切换,通常都是单Activity实现。
音频播放
音频播放和视频播放有很大不同,它不总是需要显示其界面,播放器常常作为后台任务运行,用户切换界面或应用,也要继续聆听。而且往往会有蓝牙耳机一类的外部设备参与。
这就涉及到可能锁屏时的交互,通知栏交互,外设的操作交互等等。因此,app通常总是用两个组件去实现:界面用Activity,播放器用服务(MediaBrowserService)。
界面可以关闭,播放服务常住后台就可以实现。
上图是Android官方的架构图。实现上面结构,同时也为外设提供便利。下面是Android官方提供的说明:
使用 MediaBrowserService 可以让配套设备(如 Android Auto 和 Wear)轻松发现您的应用,连接到该应用,浏览内容并控制播放,而根本无需访问应用的界面 Activity。 事实上,可以有多个应用同时连接到同一个 MediaBrowserService,每个应用都有自己的 MediaController。提供 MediaBrowserService 的应用应该能够同时处理多个连接。
库的使用
虽然说高版本系统有提供api支持,但是为了统一和兼容还是建议使用官方Media库:
// Gradle 引用
implementation “androidx.media:media:1.3.0”
使用说明以及API,移步官网。