Android媒体应用框架

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,移步官网

Built with Hugo
主题 StackJimmy 设计