Notifications on watches use the same APIs and have the same structure as notifications on phones.


Notifications can appear on a watch in two ways:

1. A mobile app creates a notification and the system [automatically bridges](https://developer.android.com/training/wearables/notifications/bridger) that notification to the watch.
2. A wearable app creates a notification.


For both scenarios, use the
[NotificationCompat.Builder](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder)
class to create notifications. When you build notifications with the builder class, the system
takes care of displaying notifications properly. For example, when you issue a notification from
your mobile app, each notification appears as a card on the Notification Stream.


Review the following example to see how notifications display.

![notification-cards](https://developer.android.com/static/images/ui/notifications/wear_2x.png)

**Figure 1.** The same notification displayed on a phone and on a watch.


Use one of the
[NotificationCompat.Style](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Style)
subclasses for the best results.

**Note:**
Using [RemoteViews](https://developer.android.com/reference/android/widget/RemoteViews)
strips notifications of custom layouts, and the wearable only displays the text and icons.

## Recommended notifications for wearables


Use expandable notifications as the starting point for all notifications, as they are
a great way to engage wearable users. The collapsed state displays in the notification
tray for a short, glanceable experience. If the user taps it, the notification expands,
revealing an immersive, scrollable experience of additional content and actions.


You can [Create an expandable notification](https://developer.android.com/training/notify-user/expanded)
the same way you would on mobile, using any of the `NotificationCompat.Style`
subclasses. For example, a standard notification using
[NotificationCompat.MessagingStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.MessagingStyle)
looks like this:

![expandable-notification](https://developer.android.com/static/images/ui/notifications/expandable_noti.png)

**Figure 2.** Example of a `MessagingStyle` notification on Wear OS.


You can see the notification has multiple
[actions](https://developer.android.com/develop/ui/views/notifications/build-notification#Actions) stacked at the bottom of the
expanded state.


For examples of
[NotificationCompat.BigPictureStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.BigPictureStyle),
[NotificationCompat.BigTextStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.BigTextStyle),
[NotificationCompat.InboxStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.InboxStyle),
and [NotificationCompat.MessagingStyle](https://developer.android.com/reference/androidx/core/app/NotificationCompat.MessagingStyle),
check out the [Notification sample](https://github.com/android/user-interface-samples/tree/d192c9d2000e43f63cca3eb1b9af05cf2e2ee867/Notifications)
on GitHub.


**Tip:** If your notifications include a "reply" action, such as for a messaging
app, you can enhance the behavior of the notification. For example, you can enable voice input
replies directly from the wearable or pre-defined text responses with
[setChoices()](https://developer.android.com/reference/androidx/core/app/RemoteInput.Builder#setChoices(java.lang.CharSequence[])).
For more information, read
[Add the reply button](https://developer.android.com/training/notify-user/build-notification#add-reply-action).

## Avoid duplicate Notifications


By default, notifications are bridged from a companion phone app to any paired watches. This is a
great option if you don't have a wearable app installed.


However, if you build a standalone watch app and a companion phone app, the apps
create duplicate notifications.


Wear OS provides a way to stop duplicate notifications with the Bridging APIs. This is
particularly important for apps on devices that run Wear OS 5 or higher, because some
notifications that are dismissible on a mobile device aren't dismissible on the Wear OS device.
For more information, read
[Bridging options for notifications](https://developer.android.com/training/wearables/notifications/bridger).

## Add wearable-specific features to a notification


If you need to add wearable-specific features to a notification, such as hiding
an app icon from the wearable notification or letting users dictate a text response
with voice input, you can use the
`NotificationCompat.WearableExtender` class to specify the options.
To use this API, do the following:

1. Create an instance of a [`WearableExtender`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.WearableExtender), setting the wearable-specific options for the notification.
2. Create an instance of `NotificationCompat.Builder`, setting the desired properties for your notification as described earlier in this guide.
3. Call [`extend()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#extend(androidx.core.app.NotificationCompat.Extender)) on the notification and pass in the `WearableExtender`. This applies the wearable options to the notification.
4. Call [`build()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#build()) to build the notification.

**Note:**
If you use the framework's [NotificationManager](https://developer.android.com/reference/android/app/NotificationManager),
some features from
`NotificationCompat.WearableExtender` don't work, so make sure to use
[`NotificationCompat`](https://developer.android.com/reference/androidx/core/app/NotificationCompat).


You can sync dismissals or cancellations of notifications across the user's devices. To
sync a dismissal, use the
[`setDismissalId()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.WearableExtender#setDismissalId(java.lang.String)) method. For each notification, pass a globally unique
ID as a string when you call
`setDismissalId()`. When the notification is dismissed, all other
notifications with the same dismissal ID are dismissed on the watch and on the
companion phone. To retrieve a dismissal ID, use
[`getDismissalId()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.WearableExtender#getDismissalId()).

## Specify wearable-only actions


If you want different actions available on the watch and the phone, then use
[`WearableExtender.addAction()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.WearableExtender#addAction(androidx.core.app.NotificationCompat.Action)). Once you add an action with this method,
the wearable does not display any other actions added with
[`NotificationCompat.Builder.addAction()`](https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#addAction(androidx.core.app.NotificationCompat.Action)). The actions added with
`WearableExtender.addAction()` appear only on the wearable, not
on the phone.

## Launch your phone app from a wearable device


If you are using bridged notifications, any notification automatically includes a button to launch
the app on the phone. However, if you are using a local notification, created on the watch, use
the following steps to create a button that launches the app on the phone:

1. Create a new `Activity` that extends [`ConfirmationActivity`](https://developer.android.com/reference/androidx/wear/activity/ConfirmationActivity).
2. Use [`RemoteActivityHelper`](https://developer.android.com/reference/androidx/wear/remote/interactions/RemoteActivityHelper) in the new `Activity` to launch the phone app.
3. When building the `Intent` to launch the `Activity` from the notification, set the [`EXTRA_ANIMATION_TYPE`](https://developer.android.com/reference/androidx/wear/activity/ConfirmationActivity#EXTRA_ANIMATION_TYPE()) extra to [`OPEN_ON_PHONE_ANIMATION`](https://developer.android.com/reference/androidx/wear/activity/ConfirmationActivity#OPEN_ON_PHONE_ANIMATION()).

This approach guides the user to interacting on their phone and follows the platform requirements for launching background processes.

<br />


**Note:** You can't use a `BroadcastReceiver` as the target
of the notification action.