Android API Guide for Media Apps(二)——媒体会话的使用(Working with a Mession)

Working with a Media Session

媒体会话与其管理的播放器并存。你应该在activity或service的onCreate()方法中创建并初始化媒体会话,并持有媒体会话和它关联的播放器对象。

Note:编写媒体应用最好的实战就是使用media-compat library。本文的“media session”表示MediaSessionCompat的实例,“media controller”表示MediaControllerCompat的实例。

初始化媒体会话(Initialize the media session)

一个新创建的媒体会话并没有兼容性。你必须通过下面这些步骤初始化媒体会话:

  • 设置标识以便媒体会话可以接收来自媒体控制器和媒体按钮的回调函数。

  • 创建并初始化PlaybackStateCompat实例并将其添加到会话中。播放状态自始至终伴随着媒体会话,所以我们推荐缓存 PlaybackStateCompat.Builder来重复用。

  • 创建一个MediaSessionCompat.Callback实例并将其添加到会话中。

你应该在activity或service的onCreate方法中创建并初始化媒体会话,并持有该会话对象。

为了让媒体按钮在你应用初始化(或停止)时能正常工作,它的PlaybackState必须包含播放事件来匹配媒体按钮所发送的意图。这就是为什么要将ACTION_PLAY的标识在初始化期间分配给会话的状态的原因。获取更多信息,查看Responding to Media Buttons.

维持播放状态和元数据(Maintain the playback state and metadata)

这里有两个类表示媒体会话的状态

PlaybackStateCompat类描述当前播放器操作的状态。它包含:

  • 传输状态(是否播放器正在播放/暂停/缓存,等)

  • 播放器的位置

  • 当前状态可以被处理的控制器事件

MediaMetadataCompat类描述播放器正在播放的数据源:

  • 艺术家、专辑和轨道的名称

  • 轨道持续时间

  • 锁屏时显示的专辑封面。封面图是最大尺寸为320X320dp的位图(如果图片更大,就会被压缩)

  • ContentUris的实例指向更高版本的专辑。

播放器的状态和元数据可改变媒体会话的生命周期。每次状态或元数据的改变, 你必须使用适当的构建器 PlaybackStateCompat.Builder() 或 MediaMetadataCompat.Builder()创建新的实例,并通过 setPlaybackState()或 setMetaData()将实例传到媒体会话中。为了减少这些频繁的操作所消耗的总体内存,有一个不错的方式就是一旦创建构建器,就在整个媒体会话的生命周期中复用它们。

如果对播放状态有兴趣,参看PlaybackStateCompat的内容。

锁屏时的媒体会话(Media session lock screens)

从Android 4.0(API level 14)开始,系统可以访问媒体会话的播放状态和元数据。这就是为什么在锁屏时能显示媒体控件和封面的原因。不过这个显示结果也要取决于Android版本。

专辑图片(Album artwork)

在Android 4.0(API 14)或更高版本,锁屏后的后台显示专辑封面–只能在媒体会话的元数据中包含一张背景位图才可以。

传送控件(Transport controls)

在Android 4.0(API 14)和Android 4.4(API 19)之间,当有一个媒体会话处于活动状态并且它的元数据包含一个背景位图,锁屏时就会自动显示这个传送控件。

在Android5.0(API 21)或更高版本,系统不支持在锁屏时传输控制。相反,你应该使用一个MediaStyle notification来显示传送控件。

媒体会话的回调(Media session callbacks)

主要的媒体会话回调方法是onPlay(),onPause()和onStop()。添加这些代码用于控制你的播放器。

在运行期间(在onCreate()中)一旦初始化并设置媒体会话的回调后,你的应用可以定义不同的回调方法来使用不同的播放器并根据设备或系统的级别来选择适当的回调/播放器结合。你可以在不需要改变app其它地方就改变播放器。例如,你可以在运行Android 4.1或更高版本的系统上使用ExoPlayer,在4.1之前的Android系统上可以使用MediaPlayer。

除了控制播放器和管理媒体会话状态的事务,回调方法也可以启用和禁用应用的功能,以及控制与其它应用、设备硬件的交互方式(参看Handler Changes in Audio Output).

媒体会话回调方法的实现取决于应用的架构。参看单独的一篇描述如何在音频应用和视频应用使用回调以及描述每种类型的应用应该如何实现回调的文档。

猜你喜欢

转载自blog.csdn.net/u014011112/article/details/54849417