您的位置:首页 > 移动开发 > Android开发

Android媒体应用(三)--使用媒体会话

2017-09-20 10:19 211 查看
原文地址: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 session及其关联播放器的Activity或Service的onCreate()方法中创建和初始化 media session。

为了让media buttons在您的应用程序新初始化(或停止)时起作用,其播放状态必须包含与媒media buttons发送的意图相符的播放动作。这就是为什么在初始化期间将ACTION_PLAY分配给会话状态的原因。有关详细信息,请参阅响应media
buttons。

保持播放状态和元数据

有两个表示media session状态的类。

PlaybackStateCompat类描述播放器的当前操作状态。这包括:
运输状态(玩家是否播放/暂停/缓冲等)
玩家位置
可在当前状态下处理的有效控制器动作

MediaMetadataCompat类描述正在播放的资料:
艺术家,专辑和曲目的名称
轨道持续时间
专辑图片显示在锁定屏幕上。该图像是最大尺寸为320x320dp的位图(如果更大,则缩小)。
ContentUris的一个实例,指向一幅较大版本的作品

播放器状态和元数据可以在media session的整个生命周期中改变。每次状态或元数据更改时,您必须为每个类PlaybackStateCompat.Builder()或MediaMetadataCompat.Builder()使用相应的构建器,然后通过调用setPlaybackState()或setMetaData()将新实例传递到media
session。为了减少这些频繁操作的总体内存消耗,建议一次创建构建器并在会话的整个生命周期中重用它们。


Media Session锁定屏幕

从Android 4.0(API级别14)开始,系统可以访问media session的播放状态和元数据。这是锁屏后仍然可以显示媒体控件和图稿的原因。不过具体的表现形式因Android版本而异。

专辑作品

在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回调方法的实现取决于您的应用程序的结构。请参考如何在音频应用程序视频应用程序,详细介绍了如何为每种应用程序实现回调。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: