Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.
Android 0.0.0 Developer Preview
belongs to Maven artifact androidx.media:media:1.0.0-rc01

NotificationCompat.MediaStyle

public static class NotificationCompat.MediaStyle
extends NotificationCompat.Style

java.lang.Object
   ↳ androidx.core.app.NotificationCompat.Style
     ↳ androidx.media.app.NotificationCompat.MediaStyle


Notification style for media playback notifications. In the expanded form, up to 5 actions specified with #addAction(int, CharSequence, PendingIntent) addAction will be shown as icon-only pushbuttons, suitable for transport controls. The Bitmap given to #setLargeIcon(android.graphics.Bitmap) setLargeIcon() will be treated as album artwork. Unlike the other styles provided here, MediaStyle can also modify the standard-size content view; by providing action indices to setShowActionsInCompactView(int) you can promote up to 3 actions to be displayed in the standard view alongside the usual content. Notifications created with MediaStyle will have their category set to CATEGORY_TRANSPORT unless you set a different category using setCategory(). Finally, if you attach a MediaSession.Token using setMediaSession(MediaSessionCompat.Token), the System UI can identify this as a notification representing an active media session and respond accordingly (by showing album artwork in the lockscreen, for example). To use this style with your Notification, feed it to NotificationCompat.Builder.setStyle(NotificationCompat.Style) like so:

 Notification noti = new NotificationCompat.Builder()
     .setSmallIcon(R.drawable.ic_stat_player)
     .setContentTitle("Track title")
     .setContentText("Artist - Album")
     .setLargeIcon(albumArtBitmap))
     .setStyle(new NotificationCompat.MediaStyle()
         .setMediaSession(mySession))
     .build();
 

Summary

Public constructors

NotificationCompat.MediaStyle()
NotificationCompat.MediaStyle(NotificationCompat.Builder builder)

Public methods

static MediaSessionCompat.Token getMediaSession(Notification notification)

Extracts a MediaSessionCompat.Token from the extra values in the NotificationCompat.MediaStyle notification.

NotificationCompat.MediaStyle setCancelButtonIntent(PendingIntent pendingIntent)

Sets the pending intent to be sent when the cancel button is pressed.

NotificationCompat.MediaStyle setMediaSession(MediaSessionCompat.Token token)

Attaches a MediaSessionCompat.Token to this Notification to provide additional playback information and control to the SystemUI.

NotificationCompat.MediaStyle setShowActionsInCompactView(int... actions)

Requests up to 3 actions (by index in the order of addition) to be shown in the compact notification view.

NotificationCompat.MediaStyle setShowCancelButton(boolean show)

Sets whether a cancel button at the top right should be shown in the notification on platforms before Lollipop.

Inherited methods

Public constructors

NotificationCompat.MediaStyle

public NotificationCompat.MediaStyle ()

NotificationCompat.MediaStyle

public NotificationCompat.MediaStyle (NotificationCompat.Builder builder)

Parameters
builder NotificationCompat.Builder

Public methods

getMediaSession

public static MediaSessionCompat.Token getMediaSession (Notification notification)

Extracts a MediaSessionCompat.Token from the extra values in the NotificationCompat.MediaStyle notification.

Parameters
notification Notification: The notification to extract a MediaSessionCompat.Token from.

Returns
MediaSessionCompat.Token The MediaSessionCompat.Token in the notification if it contains, null otherwise.

setCancelButtonIntent

public NotificationCompat.MediaStyle setCancelButtonIntent (PendingIntent pendingIntent)

Sets the pending intent to be sent when the cancel button is pressed. See setShowCancelButton(boolean).

Parameters
pendingIntent PendingIntent: the intent to be sent when the cancel button is pressed

Returns
NotificationCompat.MediaStyle

setMediaSession

public NotificationCompat.MediaStyle setMediaSession (MediaSessionCompat.Token token)

Attaches a MediaSessionCompat.Token to this Notification to provide additional playback information and control to the SystemUI.

Parameters
token MediaSessionCompat.Token

Returns
NotificationCompat.MediaStyle

setShowActionsInCompactView

public NotificationCompat.MediaStyle setShowActionsInCompactView (int... actions)

Requests up to 3 actions (by index in the order of addition) to be shown in the compact notification view.

Parameters
actions int: the indices of the actions to show in the compact notification view

Returns
NotificationCompat.MediaStyle

setShowCancelButton

public NotificationCompat.MediaStyle setShowCancelButton (boolean show)

Sets whether a cancel button at the top right should be shown in the notification on platforms before Lollipop.

Prior to Lollipop, there was a bug in the framework which prevented the developer to make a notification dismissable again after having used the same notification as the ongoing notification for a foreground service. When the notification was posted by Service.startForeground(int, Notification), but then the service exited foreground mode via Service.stopForeground(boolean), without removing the notification, the notification stayed ongoing, and thus not dismissable.

This is a common scenario for media notifications, as this is exactly the service lifecycle that happens when playing/pausing media. Thus, a workaround is provided by the support library: Instead of making the notification ongoing depending on the playback state, the support library provides the ability to add an explicit cancel button to the notification.

Note that the notification is enforced to be ongoing if a cancel button is shown to provide a consistent user experience.

Also note that this method is a no-op when running on Lollipop and later.

Parameters
show boolean: whether to show a cancel button

Returns
NotificationCompat.MediaStyle