public class MediaSessionCompat
extends Object
java.lang.Object | |
↳ | android.support.v4.media.session.MediaSessionCompat |
允许与媒体控制器,音量键,媒体按钮和传输控件进行交互。
当应用程序想要发布媒体播放信息或处理媒体密钥时,应创建MediaSession。 一般来说,一个应用程序只需要一个会话进行所有播放,但可创建多个会话来提供更精细的媒体控制。
一旦创建会话,会话的所有者可以将其 session token
传递给其他进程,以允许他们创建 MediaControllerCompat
与会话进行交互。
要接收命令,媒体密钥和其他事件, MediaSessionCompat.Callback
必须使用 setCallback(Callback)
进行设置。
当应用程序完成播放时,它必须调用 release()
来清理会话并通知任何控制器。
MediaSessionCompat对象不是线程安全的,所有调用都应该使用同一个线程。
这是帮助您以向后兼容的方式访问API级别4之后引入的 MediaSession
功能。
Nested classes |
|
---|---|
class |
MediaSessionCompat.Callback 接收来自控制器和系统的传输控制,媒体按钮和命令。 |
interface |
MediaSessionCompat.OnActiveChangeListener
|
class |
MediaSessionCompat.QueueItem 作为播放队列一部分的单个项目。 |
class |
MediaSessionCompat.Token 代表正在进行的会议。 |
Constants |
|
---|---|
int |
FLAG_HANDLES_MEDIA_BUTTONS 在会话上设置此标志以指示它可以处理媒体按钮事件。 |
int |
FLAG_HANDLES_TRANSPORT_CONTROLS 在会话上设置此标志以指示它通过 |
Public constructors |
|
---|---|
MediaSessionCompat(Context context, String tag) 创建一个新的会话。 |
|
MediaSessionCompat(Context context, String tag, ComponentName mbrComponent, PendingIntent mbrIntent) 使用指定媒体按钮接收器(组件名称和/或未决意图)创建新会话。 |
Public methods |
|
---|---|
void |
addOnActiveChangeListener(MediaSessionCompat.OnActiveChangeListener listener) 添加一个侦听器,以便在此会话的活动状态更改时进行通知。 |
MediaControllerCompat |
getController() 获取此会话的控制器。 |
Object |
getMediaSession() 获取底层框架 |
Object |
getRemoteControlClient() 获取底层框架 |
MediaSessionCompat.Token |
getSessionToken() 检索可供应用程序使用的令牌对象,以创建用于与此会话进行交互的 |
boolean |
isActive() 获取此会话的当前活动状态。 |
static MediaSessionCompat |
obtain(Context context, Object mediaSession) 获取现有MediaSession的compat包装器。 |
void |
release() 当应用程序完成播放时必须调用此选项。 |
void |
removeOnActiveChangeListener(MediaSessionCompat.OnActiveChangeListener listener) 当该会话的活动状态改变时,停止监听器被通知。 |
void |
sendSessionEvent(String event, Bundle extras) 向所有监听本会话的MediaController发送专有事件。 |
void |
setActive(boolean active) 如果此会话当前处于活动状态并准备好接收命令,请设置。 |
void |
setCallback(MediaSessionCompat.Callback callback, Handler handler) 将回调设置为接收MediaSession的更新。 |
void |
setCallback(MediaSessionCompat.Callback callback) 添加一个回调以接收MediaSession的更新。 |
void |
setExtras(Bundle extras) 设置一些可以与 |
void |
setFlags(int flags) 为会话设置任何标志。 |
void |
setMediaButtonReceiver(PendingIntent mbr) 为媒体按钮接收器设置挂起的意图,以允许在会话停止后重新开始播放。 |
void |
setMetadata(MediaMetadataCompat metadata) 更新当前的元数据。 |
void |
setPlaybackState(PlaybackStateCompat state) 更新当前播放状态。 |
void |
setPlaybackToLocal(int stream) 设置此会话正在播放的流。 |
void |
setPlaybackToRemote(VolumeProviderCompat volumeProvider) 配置此会话以使用远程卷处理。 |
void |
setQueue(List<MediaSessionCompat.QueueItem> queue) 更新播放队列中的项目列表。 |
void |
setQueueTitle(CharSequence title) 设置播放队列的标题。 |
void |
setRatingType(int type) 设置此会话使用的评分风格。 |
void |
setSessionActivity(PendingIntent pi) 为此会话设置启动用户界面的意图。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int FLAG_HANDLES_MEDIA_BUTTONS
在会话上设置此标志以指示它可以处理媒体按钮事件。
常数值:1(0x00000001)
int FLAG_HANDLES_TRANSPORT_CONTROLS
在会话上设置此标志以指示它通过其 MediaSessionCompat.Callback
处理传输控制命令。
常量值:2(0x00000002)
MediaSessionCompat (Context context, String tag)
创建一个新的会话。 会议结束后,您必须致电release()
。
会话将自动注册到系统,但直到 setActive(true)
才会发布。
对于API 20或更早版本,请注意,处理ACTION_MEDIA_BUTTON
需要媒体按钮接收器。 这个构造函数将尝试从你的清单中找到合适的BroadcastReceiver
。 详情请参阅MediaButtonReceiver
。
Parameters | |
---|---|
context |
Context : The context to use to create the session. |
tag |
String : A short name for debugging purposes. |
MediaSessionCompat (Context context, String tag, ComponentName mbrComponent, PendingIntent mbrIntent)
使用指定媒体按钮接收器(组件名称和/或未决意图)创建新会话。 会议结束后,您必须致电release()
。
会话将自动在系统中注册,但直到setActive(true)
才会发布。 请注意, mbrComponent
和mrbIntent
仅用于API 20或更早版本。 如果您想在API 21或更高版本中设置媒体按钮接收器,请致电setMediaButtonReceiver(PendingIntent)
。
对于API 20或更早版本,新会话将使用给定的mbrComponent
。 如果为空,这将试图找到一个适当的BroadcastReceiver
来处理清单中的ACTION_MEDIA_BUTTON
。 详情请参阅MediaButtonReceiver
。
Parameters | |
---|---|
context |
Context : The context to use to create the session. |
tag |
String : A short name for debugging purposes. |
mbrComponent |
ComponentName : The component name for your media button receiver. |
mbrIntent |
PendingIntent : The PendingIntent for your receiver component that handles media button events. This is optional and will be used on between JELLY_BEAN_MR2 and KITKAT_WATCH instead of the component name. |
void addOnActiveChangeListener (MediaSessionCompat.OnActiveChangeListener listener)
添加一个侦听器,以便在此会话的活动状态更改时进行通知。 这主要由支持库使用,不应该由应用程序需要。
Parameters | |
---|---|
listener |
MediaSessionCompat.OnActiveChangeListener : The listener to add. |
MediaControllerCompat getController ()
获取此会话的控制器。 这是避免在进程中缓存自己的控制器的一种便利方法。
Returns | |
---|---|
MediaControllerCompat |
A controller for this session. |
Object getMediaSession ()
获取底层框架 MediaSession
对象。
此方法仅在API 21+上受支持。
Returns | |
---|---|
Object |
The underlying MediaSession object, or null if none. |
Object getRemoteControlClient ()
获取底层框架 RemoteControlClient
对象。
此方法仅在API 14-20上受支持。 应使用API 21+ getMediaSession()
。
Returns | |
---|---|
Object |
The underlying RemoteControlClient object, or null if none. |
MediaSessionCompat.Token getSessionToken ()
检索可供应用程序使用的令牌对象,以创建用于与此会话进行交互的MediaControllerCompat
。 会话的所有者负责决定如何分配这些令牌。
在 LOLLIPOP
之前的平台版本上,此标记只能在您的应用程序中使用,因为无法保证其他应用程序正在使用相同版本的支持库。
Returns | |
---|---|
MediaSessionCompat.Token |
A token that can be used to create a media controller for this session. |
boolean isActive ()
获取此会话的当前活动状态。
Returns | |
---|---|
boolean |
True if the session is active, false otherwise. |
MediaSessionCompat obtain (Context context, Object mediaSession)
获取现有MediaSession的compat包装器。
Parameters | |
---|---|
context |
Context
|
mediaSession |
Object : The MediaSession to wrap. |
Returns | |
---|---|
MediaSessionCompat |
A compat wrapper for the provided session. |
void release ()
当应用程序完成播放时必须调用此选项。 如果播放预计很快会重新开始,则会话可以保持打开状态,但是如果您的活动或服务正在销毁,则必须释放该会话。
void removeOnActiveChangeListener (MediaSessionCompat.OnActiveChangeListener listener)
当该会话的活动状态改变时,停止监听器被通知。
Parameters | |
---|---|
listener |
MediaSessionCompat.OnActiveChangeListener : The listener to remove. |
void sendSessionEvent (String event, Bundle extras)
向所有监听本会话的MediaController发送专有事件。 由控制器/会话所有者决定任何事件的含义。
Parameters | |
---|---|
event |
String : The name of the event to send |
extras |
Bundle : Any extras included with the event |
void setActive (boolean active)
如果此会话当前处于活动状态并准备好接收命令,请设置。 如果设置为false,则会话的控制器可能无法被发现。 必须先将会话设置为活动状态,然后才能开始接收媒体按钮事件或传输命令。
在早于 LOLLIPOP
平台上,应通过构造函数设置媒体按钮事件接收器以接收媒体按钮事件。
Parameters | |
---|---|
active |
boolean : Whether this session is active or not. |
void setCallback (MediaSessionCompat.Callback callback, Handler handler)
将回调设置为接收MediaSession的更新。 这包括媒体按钮和音量事件。 将回调设置为null以停止接收事件。
Parameters | |
---|---|
callback |
MediaSessionCompat.Callback : The callback to receive updates on. |
handler |
Handler : The handler that events should be posted on. |
void setCallback (MediaSessionCompat.Callback callback)
添加一个回调以接收MediaSession的更新。 这包括媒体按钮和音量事件。 调用者的线程将用于发布事件。
Parameters | |
---|---|
callback |
MediaSessionCompat.Callback : The callback object |
void setExtras (Bundle extras)
设置一些可以与MediaSessionCompat
关联的MediaSessionCompat
。 关于MediaControllerCompat
如何处理这些额外信息,不应该做出任何假设。 密钥应完全限定(例如com.example.MY_EXTRA)以避免冲突。
Parameters | |
---|---|
extras |
Bundle : The extras associated with the session. |
void setFlags (int flags)
为会话设置任何标志。
Parameters | |
---|---|
flags |
int : The flags to set for this session. |
void setMediaButtonReceiver (PendingIntent mbr)
为媒体按钮接收器设置挂起的意图,以允许在会话停止后重新开始播放。 如果您的应用程序以这种方式启动,则ACTION_MEDIA_BUTTON
意图将通过未决意图发送。
此方法仅适用于LOLLIPOP
及更高版本。 早期的平台版本必须在构造函数中包含媒体按钮接收器。
Parameters | |
---|---|
mbr |
PendingIntent : The PendingIntent to send the media button event to. |
void setMetadata (MediaMetadataCompat metadata)
更新当前的元数据。 新的元数据可以使用MediaMetadata.Builder
创建。
Parameters | |
---|---|
metadata |
MediaMetadataCompat : The new metadata |
void setPlaybackState (PlaybackStateCompat state)
更新当前播放状态。
Parameters | |
---|---|
state |
PlaybackStateCompat : The current state of playback |
void setPlaybackToLocal (int stream)
设置此会话正在播放的流。 这将影响此会话的系统卷处理。 如果先前调用了setPlaybackToRemote(VolumeProviderCompat)
,它将停止接收音量命令,系统将开始将音量更改发送到相应的流。
默认情况下会话是 STREAM_MUSIC
。
Parameters | |
---|---|
stream |
int : The AudioManager stream this session is playing on. |
void setPlaybackToRemote (VolumeProviderCompat volumeProvider)
配置此会话以使用远程卷处理。 必须调用此选项才能接收音量按钮事件,否则系统将调整此会话的当前流音量。 如果先前调用了setPlaybackToLocal(int)
则该流将停止接收此会话的音量更改。
在早于LOLLIPOP
平台上,这将只允许应用程序处理由MediaControllerCompat
直接发送到会话的卷命令。 音量键的系统路由不会使用音量提供程序。
Parameters | |
---|---|
volumeProvider |
VolumeProviderCompat : The provider that will handle volume changes. May not be null. |
void setQueue (List<MediaSessionCompat.QueueItem> queue)
更新播放队列中的项目列表。 它是一个有序列表,应包含当前项目以及前一个或即将到来的项目(如果存在)。 如果没有当前的播放队列,则指定null。
队列应该是合理的大小。 如果您的应用中的播放队列不受限制,最好在滑动窗口中发送合理的数量。
Parameters | |
---|---|
queue |
List : A list of items in the play queue. |
void setQueueTitle (CharSequence title)
设置播放队列的标题。 用户界面应该显示该标题以及播放队列本身。 例如“播放队列”,“正在播放”或专辑名称。
Parameters | |
---|---|
title |
CharSequence : The title of the play queue. |
void setRatingType (int type)
设置此会话使用的评分风格。 尝试设置评分的应用应使用此样式。 必须是以下之一:
RATING_NONE
RATING_3_STARS
RATING_4_STARS
RATING_5_STARS
RATING_HEART
RATING_PERCENTAGE
RATING_THUMB_UP_DOWN
Parameters | |
---|---|
type |
int
|
void setSessionActivity (PendingIntent pi)
为此会话设置启动用户界面的意图。 这可以用作到正在进行的媒体屏幕的快速链接。 意图应该是针对可能使用startActivity(Intent)
开始的活动。
Parameters | |
---|---|
pi |
PendingIntent : The intent to launch to show UI for this Session. |