MediaStyleNotificationHelper.MediaStyle


public class MediaStyleNotificationHelper.MediaStyle extends NotificationCompat.Style

Known direct subclasses
MediaStyleNotificationHelper.DecoratedMediaCustomViewStyle

Notification style for media custom views that are decorated by the system.


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 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, 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 setStyle like so:

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

Summary

Public constructors

Creates a new instance with a MediaSession to this Notification to provide additional playback information and control to the SystemUI.

Public methods

void

Applies the compat style data to the framework Notification in a backwards compatible way.

static @Nullable SessionToken

Extracts a SessionToken from the extra values in the MediaStyle notification.

@Nullable RemoteViews
@Nullable RemoteViews
MediaStyleNotificationHelper.MediaStyle

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

MediaStyleNotificationHelper.MediaStyle
@CanIgnoreReturnValue
@RequiresPermission(value = "android.permission.MEDIA_CONTENT_CONTROL")
setRemotePlaybackInfo(
    CharSequence deviceName,
    @DrawableRes int iconResource,
    @Nullable PendingIntent chipIntent
)

For media notifications associated with playback on a remote device, provide device information that will replace the default values for the output switcher chip on the media control, as well as an intent to use when the output switcher chip is tapped, on devices where this is supported.

MediaStyleNotificationHelper.MediaStyle

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

MediaStyleNotificationHelper.MediaStyle

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

Inherited methods

From androidx.core.app.NotificationCompat.Style
@Nullable Notification

If this Style object has been set on a notification builder, this method will build that notification and return it.

void

Link this rich notification style with a notification builder.

Public constructors

MediaStyle

public MediaStyle(MediaSession session)

Creates a new instance with a MediaSession to this Notification to provide additional playback information and control to the SystemUI.

Public methods

apply

public void apply(NotificationBuilderWithBuilderAccessor builder)

Applies the compat style data to the framework Notification in a backwards compatible way. All other data should be stored within the Notification's extras.

getSessionToken

public static @Nullable SessionToken getSessionToken(Notification notification)

Extracts a SessionToken from the extra values in the MediaStyle notification.

Parameters
Notification notification

The notification to extract a MediaSession from.

Returns
@Nullable SessionToken

The SessionToken in the notification if it contains, null otherwise.

setCancelButtonIntent

@CanIgnoreReturnValue
public MediaStyleNotificationHelper.MediaStyle setCancelButtonIntent(PendingIntent pendingIntent)

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

Parameters
PendingIntent pendingIntent

the intent to be sent when the cancel button is pressed

setRemotePlaybackInfo

@CanIgnoreReturnValue
@RequiresPermission(value = "android.permission.MEDIA_CONTENT_CONTROL")
public MediaStyleNotificationHelper.MediaStyle setRemotePlaybackInfo(
    CharSequence deviceName,
    @DrawableRes int iconResource,
    @Nullable PendingIntent chipIntent
)

For media notifications associated with playback on a remote device, provide device information that will replace the default values for the output switcher chip on the media control, as well as an intent to use when the output switcher chip is tapped, on devices where this is supported.

Most apps should integrate with android.media.MediaRouter2 instead. This method is only intended for system applications to provide information and/or functionality that would otherwise be unavailable to the default output switcher because the media originated on a remote device.

Also note that this method is a no-op when running on API 33 or lower.

Parameters
CharSequence deviceName

The name of the remote device to display.

@DrawableRes int iconResource

Icon resource, of size 12, representing the device.

@Nullable PendingIntent chipIntent

PendingIntent to send when the output switcher is tapped. May be null, in which case the output switcher will be disabled. This intent should open an android.app.Activity or it will be ignored.

setShowActionsInCompactView

@CanIgnoreReturnValue
public MediaStyleNotificationHelper.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
int[] actions

the indices of the actions to show in the compact notification view

setShowCancelButton

@CanIgnoreReturnValue
public MediaStyleNotificationHelper.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 startForeground, but then the service exited foreground mode via stopForeground, 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
boolean show

whether to show a cancel button