public final class MediaSession
extends Object
java.lang.Object | |
↳ | android.media.session.MediaSession |
允许与媒体控制器,音量键,媒体按钮和传输控件进行交互。
当应用程序想要发布媒体播放信息或处理媒体密钥时,应创建MediaSession。 一般来说,一个应用程序只需要一个会话进行所有播放,但可创建多个会话来提供更精细的媒体控制。
一旦创建会话,会话的所有者可以将其 session token
传递给其他进程,以允许他们创建 MediaController
与会话进行交互。
接收命令,媒体键,和其它事件 MediaSession.Callback
必须设置 setCallback(Callback)
和 setActive(true)
必须被调用。
当应用程序完成播放时,它必须调用 release()
来清理会话并通知任何控制器。
MediaSession对象是线程安全的。
Nested classes |
|
---|---|
class |
MediaSession.Callback 从控制器和系统接收媒体按钮,传输控制和命令。 |
class |
MediaSession.QueueItem 作为播放队列一部分的单个项目。 |
class |
MediaSession.Token 代表正在进行的会议。 |
Constants |
|
---|---|
int |
FLAG_HANDLES_MEDIA_BUTTONS 在会话上设置此标志以指示它可以处理媒体按钮事件。 |
int |
FLAG_HANDLES_TRANSPORT_CONTROLS 在会话上设置此标志以指示它通过 |
Public constructors |
|
---|---|
MediaSession(Context context, String tag) 创建一个新的会话。 |
Public methods |
|
---|---|
MediaController |
getController() 获取此会话的控制器。 |
MediaSession.Token |
getSessionToken() 检索可供应用程序使用的令牌对象,以创建用于与此会话进行交互的 |
boolean |
isActive() 获取此会话的当前活动状态。 |
void |
release() 当应用程序完成播放时必须调用此选项。 |
void |
sendSessionEvent(String event, Bundle extras) 向所有监听本会话的MediaController发送专有事件。 |
void |
setActive(boolean active) 如果此会话当前处于活动状态并准备好接收命令,请设置。 |
void |
setCallback(MediaSession.Callback callback) 将回调设置为接收MediaSession的更新。 |
void |
setCallback(MediaSession.Callback callback, Handler handler) 将回调设置为接收MediaSession的更新。 |
void |
setExtras(Bundle extras) 设置一些可以与 |
void |
setFlags(int flags) 为会话设置任何标志。 |
void |
setMediaButtonReceiver(PendingIntent mbr) 为媒体按钮接收器设置挂起的意图,以允许在会话停止后重新开始播放。 |
void |
setMetadata(MediaMetadata metadata) 更新当前的元数据。 |
void |
setPlaybackState(PlaybackState state) 更新当前播放状态。 |
void |
setPlaybackToLocal(AudioAttributes attributes) 设置此会话音频的属性。 |
void |
setPlaybackToRemote(VolumeProvider volumeProvider) 配置此会话以使用远程卷处理。 |
void |
setQueue(List<MediaSession.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
在会话上设置此标志以指示它通过 MediaSession.Callback
处理传输控制命令。
常量值:2(0x00000002)
MediaSession (Context context, String tag)
创建一个新的会话。 会话将自动注册到系统,但直到setActive(true)
才会发布。 会议结束后,您必须致电release()
。
Parameters | |
---|---|
context |
Context : The context to use to create the session. |
tag |
String : A short name for debugging purposes. |
MediaController getController ()
获取此会话的控制器。 这是避免在进程中缓存自己的控制器的一种便利方法。
Returns | |
---|---|
MediaController |
A controller for this session. |
MediaSession.Token getSessionToken ()
检索可供应用程序使用的令牌对象,以创建用于与此会话进行交互的MediaController
。 会话的所有者负责决定如何分配这些令牌。
Returns | |
---|---|
MediaSession.Token |
A token that can be used to create a MediaController for this session |
boolean isActive ()
获取此会话的当前活动状态。
Returns | |
---|---|
boolean |
True if the session is active, false otherwise. |
void release ()
当应用程序完成播放时必须调用此选项。 如果播放预计很快会重新开始,则会话可以保持打开状态,但是如果您的活动或服务正在销毁,则必须释放该会话。
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,则会话的控制器可能无法被发现。 必须先将会话设置为活动状态,然后才能开始接收媒体按钮事件或传输命令。
Parameters | |
---|---|
active |
boolean : Whether this session is active or not. |
void setCallback (MediaSession.Callback callback)
将回调设置为接收MediaSession的更新。 这包括媒体按钮事件和传输控制。 调用者的线程将用于发布更新。
将回调设置为null以停止接收更新。
Parameters | |
---|---|
callback |
MediaSession.Callback : The callback object |
void setCallback (MediaSession.Callback callback, Handler handler)
将回调设置为接收MediaSession的更新。 这包括媒体按钮事件和传输控制。
将回调设置为null以停止接收更新。
Parameters | |
---|---|
callback |
MediaSession.Callback : The callback to receive updates on. |
handler |
Handler : The handler that events should be posted on. |
void setExtras (Bundle extras)
设置一些可以与MediaSession
关联的MediaSession
。 关于MediaController
如何处理这些附加内容,不应该作出任何假设。 密钥应完全限定(例如com.example.MY_EXTRA)以避免冲突。
Parameters | |
---|---|
extras |
Bundle : The extras associated with the MediaSession . |
void setFlags (int flags)
为会话设置任何标志。
Parameters | |
---|---|
flags |
int : The flags to set for this session. |
void setMediaButtonReceiver (PendingIntent mbr)
为媒体按钮接收器设置挂起的意图,以允许在会话停止后重新开始播放。 如果您的应用程序以这种方式启动,则ACTION_MEDIA_BUTTON
意图将通过未决意图发送。
Parameters | |
---|---|
mbr |
PendingIntent : The PendingIntent to send the media button event to. |
void setMetadata (MediaMetadata metadata)
更新当前的元数据。 新的元数据可以使用MediaMetadata.Builder
创建。
Parameters | |
---|---|
metadata |
MediaMetadata : The new metadata |
void setPlaybackState (PlaybackState state)
更新当前播放状态。
Parameters | |
---|---|
state |
PlaybackState : The current state of playback |
void setPlaybackToLocal (AudioAttributes attributes)
设置此会话音频的属性。 这将影响此会话的系统卷处理。 如果先前调用setPlaybackToRemote(VolumeProvider)
,它将停止接收音量命令,系统将开始将音量更改发送到相应的流。
默认情况下会话使用媒体属性。
Parameters | |
---|---|
attributes |
AudioAttributes : The AudioAttributes for this session's audio. |
void setPlaybackToRemote (VolumeProvider volumeProvider)
配置此会话以使用远程卷处理。 必须调用此选项才能接收音量按钮事件,否则系统将为此会话调整适当的流音量。 如果先前调用了setPlaybackToLocal(AudioAttributes)
,则系统将停止处理此会话的卷更改,并将其传递给卷提供程序。
Parameters | |
---|---|
volumeProvider |
VolumeProvider : The provider that will handle volume changes. May not be null. |
void setQueue (List<MediaSession.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. |