java.lang.Object | |
↳ | android.support.v4.media.session.MediaSessionCompat |
Allows interaction with media controllers, volume keys, media buttons, and transport controls.
A MediaSession should be created when an app wants to publish media playback information or handle media keys. In general an app only needs one session for all playback, though multiple sessions can be created to provide finer grain controls of media.
Once a session is created the owner of the session may pass its
session token
to other processes to allow them to
create a MediaControllerCompat
to interact with the session.
To receive commands, media keys, and other events a MediaSessionCompat.Callback
must be
set with setCallback(Callback)
.
When an app is finished performing playback it must call release()
to clean up the session and notify any controllers.
MediaSessionCompat objects are not thread safe and all calls should be made from the same thread.
This is a helper for accessing features in
MediaSession
introduced after API level 4 in a
backwards compatible fashion.
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
MediaSessionCompat.Callback | Receives transport controls, media buttons, and commands from controllers and the system. | ||||||||||
MediaSessionCompat.OnActiveChangeListener | |||||||||||
MediaSessionCompat.QueueItem | A single item that is part of the play queue. | ||||||||||
MediaSessionCompat.Token | Represents an ongoing session. |
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | FLAG_HANDLES_MEDIA_BUTTONS | Set this flag on the session to indicate that it can handle media button events. | |||||||||
int | FLAG_HANDLES_TRANSPORT_CONTROLS |
Set this flag on the session to indicate that it handles transport
control commands through its MediaSessionCompat.Callback .
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Creates a new session.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Adds a listener to be notified when the active status of this session
changes.
| |||||||||||
Get a controller for this session.
| |||||||||||
Gets the underlying framework
MediaSession
object.
| |||||||||||
Gets the underlying framework
RemoteControlClient
object.
| |||||||||||
Retrieve a token object that can be used by apps to create a
MediaControllerCompat for interacting with this session.
| |||||||||||
Get the current active state of this session.
| |||||||||||
Obtain a compat wrapper for an existing MediaSession.
| |||||||||||
This must be called when an app has finished performing playback.
| |||||||||||
Stops the listener from being notified when the active status of this
session changes.
| |||||||||||
Send a proprietary event to all MediaControllers listening to this
Session.
| |||||||||||
Set if this session is currently active and ready to receive commands.
| |||||||||||
Add a callback to receive updates on for the MediaSession.
| |||||||||||
Set the callback to receive updates for the MediaSession.
| |||||||||||
Set some extras that can be associated with the
MediaSessionCompat .
| |||||||||||
Set any flags for the session.
| |||||||||||
Set a pending intent for your media button receiver to allow restarting
playback after the session has been stopped.
| |||||||||||
Update the current metadata.
| |||||||||||
Update the current playback state.
| |||||||||||
Set the stream this session is playing on.
| |||||||||||
Configure this session to use remote volume handling.
| |||||||||||
Update the list of items in the play queue.
| |||||||||||
Set the title of the play queue.
| |||||||||||
Set the style of rating used by this session.
| |||||||||||
Set an intent for launching UI for this Session.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
java.lang.Object
|
Set this flag on the session to indicate that it can handle media button events.
Set this flag on the session to indicate that it handles transport
control commands through its MediaSessionCompat.Callback
.
Creates a new session.
context | The context. |
---|---|
tag | A short name for debugging purposes. |
mediaButtonEventReceiver | The component name for your receiver.
This must be non-null to support platform versions earlier
than LOLLIPOP . |
mbrIntent | The PendingIntent for your receiver component that
handles media button events. This is optional and will be used
on JELLY_BEAN_MR2 and
later instead of the component name.
|
Adds a listener to be notified when the active status of this session changes. This is primarily used by the support library and should not be needed by apps.
listener | The listener to add. |
---|
Get a controller for this session. This is a convenience method to avoid having to cache your own controller in process.
Gets the underlying framework MediaSession
object.
This method is only supported on API 21+.
MediaSession
object,
or null if none.
Gets the underlying framework RemoteControlClient
object.
This method is only supported on APIs 14-20. On API 21+
getMediaSession()
should be used instead.
RemoteControlClient
object,
or null if none.
Retrieve a token object that can be used by apps to create a
MediaControllerCompat
for interacting with this session. The
owner of the session is responsible for deciding how to distribute these
tokens.
On platform versions before
LOLLIPOP
this token may only be
used within your app as there is no way to guarantee other apps are using
the same version of the support library.
Get the current active state of this session.
Obtain a compat wrapper for an existing MediaSession.
mediaSession | The MediaSession to
wrap. |
---|
This must be called when an app has finished performing playback. If playback is expected to start again shortly the session can be left open, but it must be released if your activity or service is being destroyed.
Stops the listener from being notified when the active status of this session changes.
listener | The listener to remove. |
---|
Send a proprietary event to all MediaControllers listening to this Session. It's up to the Controller/Session owner to determine the meaning of any events.
event | The name of the event to send |
---|---|
extras | Any extras included with the event |
Set if this session is currently active and ready to receive commands. If set to false your session's controller may not be discoverable. You must set the session to active before it can start receiving media button events or transport commands.
On platforms earlier than
LOLLIPOP
,
setMediaButtonReceiver(PendingIntent)
must be called before
setting this to true.
active | Whether this session is active or not. |
---|
Add a callback to receive updates on for the MediaSession. This includes media button and volume events. The caller's thread will be used to post events.
callback | The callback object |
---|
Set the callback to receive updates for the MediaSession. This includes media button and volume events. Set the callback to null to stop receiving events.
callback | The callback to receive updates on. |
---|---|
handler | The handler that events should be posted on. |
Set some extras that can be associated with the
MediaSessionCompat
. No assumptions should be made as to how a
MediaControllerCompat
will handle these extras. Keys should be
fully qualified (e.g. com.example.MY_EXTRA) to avoid conflicts.
extras | The extras associated with the session. |
---|
Set any flags for the session.
flags | The flags to set for this session. |
---|
Set a pending intent for your media button receiver to allow restarting
playback after the session has been stopped. If your app is started in
this way an ACTION_MEDIA_BUTTON
intent will be sent via
the pending intent.
This method will only work on
LOLLIPOP
and later. Earlier
platform versions must include the media button receiver in the
constructor.
mbr | The PendingIntent to send the media button event to.
|
---|
Update the current metadata. New metadata can be created using
MediaMetadata.Builder
.
metadata | The new metadata |
---|
Update the current playback state.
state | The current state of playback |
---|
Set the stream this session is playing on. This will affect the system's
volume handling for this session. If setPlaybackToRemote(VolumeProviderCompat)
was
previously called it will stop receiving volume commands and the system
will begin sending volume changes to the appropriate stream.
By default sessions are on STREAM_MUSIC
.
stream | The AudioManager stream this session is playing on.
|
---|
Configure this session to use remote volume handling. This must be called
to receive volume button events, otherwise the system will adjust the
current stream volume for this session. If setPlaybackToLocal(int)
was previously called that stream will stop receiving volume changes for
this session.
On platforms earlier than LOLLIPOP
this will only allow an app to handle volume commands sent directly to
the session by a MediaControllerCompat
. System routing of volume
keys will not use the volume provider.
volumeProvider | The provider that will handle volume changes. May not be null. |
---|
Update the list of items in the play queue. It is an ordered list and should contain the current item, and previous or upcoming items if they exist. Specify null if there is no current play queue.
The queue should be of reasonable size. If the play queue is unbounded within your app, it is better to send a reasonable amount in a sliding window instead.
queue | A list of items in the play queue. |
---|
Set the title of the play queue. The UI should display this title along with the play queue itself. e.g. "Play Queue", "Now Playing", or an album name.
title | The title of the play queue. |
---|
Set the style of rating used by this session. Apps trying to set the rating should use this style. Must be one of the following:
Set an intent for launching UI for this Session. This can be used as a
quick link to an ongoing media screen. The intent should be for an
activity that may be started using
startActivity(Intent)
.
pi | The intent to launch to show UI for this Session. |
---|