原文地址:https://developer.android.google.cn/guide/topics/media-apps/working-with-a-media-session.html
Media session与其管理的播放器具有相同的生命周期。你应该在拥有 media session及其关联播放器的Activity或Service的onCreate()方法中创建和初始化 media session。
注意:编写媒体应用程序的最佳做法是使用media-compat库。在此页面上,术语“ media session”是指MediaSessionCompat的实例,“ media controller”表示MediaControllerCompat的实例。
Media session
新创建的
media session没有功能。您必须通过执行以下步骤来初始化会话:
- 设置标志,以便media session可以从media controller和media buttons接收回调。
- 创建并初始化PlaybackStateCompat的一个实例,并将其分配给media session。播放状态在整个会话期间发生变化,因此我们建议您将PlaybackStateCompat.Builder缓存重复使用。
- 创建一个MediaSessionCompat.Callback的实例并将其分配给media session(更多在下面的回调)。
为了让 media buttons在您的应用程序新初始化(或停止)时起作用,其播放状态必须包含与媒 media buttons发送的意图相符的播放动作。这就是为什么在初始化期间将ACTION_PLAY分配给会话状态的原因。有关详细信息,请参阅 响应media buttons。
保持播放状态和元数据
PlaybackStateCompat类描述播放器的当前操作状态。这包括:
- 运输状态(玩家是否播放/暂停/缓冲等)
- 玩家位置
- 可在当前状态下处理的有效控制器动作
- 艺术家,专辑和曲目的名称
- 轨道持续时间
- 专辑图片显示在锁定屏幕上。该图像是最大尺寸为320x320dp的位图(如果更大,则缩小)。
- ContentUris的一个实例,指向一幅较大版本的作品
Media Session锁定屏幕
专辑作品
在Android 4.0(API级别14)及更高版本中,锁定屏幕的背景将显示您的专辑封面,但只有当媒体会话元数据包含背景位图时。Transport controls(传输控件)
从Android 4.0(API级别14)到Android 4.4(API级别19),当 media session处于活动状态并且 media session元数据包含背景位图时,锁定屏幕将自动显示传输控件。在Android 5.0(API级别21)或更高版本中,系统不会在锁定屏幕上提供传输控件。相反,您应该使用MediaStyle通知来显示传输控件。
Media session回调
主要的媒体media session方法是onPlay(),onPause()和onStop()。这是您添加控制播放器的代码的位置。
由于您在运行时(在onCreate())中实例化和设置会话的回调,您的应用程序可以定义使用不同播放器的替代回调,并根据设备和系统级别选择适当的回调/播放器组合。您可以更改播放器而不更改其余的应用程序。例如,您可以在Android 4.1(API级别16)或更高版本上运行时使用ExoPlayer,并在早期系统上使用MediaPlayer。
除了控制播放器和管理media session状态转换外,回调还可以启用和禁用应用程序的功能,并控制其与其他应用程序和设备硬件交互的方式。 (请参阅处理音频输出中的更改)。
media session回调方法的实现取决于您的应用程序的结构。请参考如何在音频应用程序和视频应用程序,详细介绍了如何为每种应用程序实现回调。