Уведомления на Wear OS

Уведомления на часах используют те же API и имеют ту же структуру, что и уведомления на телефонах.

Уведомления могут появляться на часах двумя способами:

  1. Мобильное приложение создает уведомление, и система автоматически пересылает его на часы.
  2. Приложение для носимого устройства создает уведомление.

Для обоих сценариев используйте класс NotificationCompat.Builder для создания уведомлений. Когда вы создаете уведомления с помощью класса builder, система заботится о правильном отображении уведомлений. Например, когда вы отправляете уведомление из своего мобильного приложения, каждое уведомление отображается как карточка в Notification Stream.

Ознакомьтесь со следующим примером, чтобы увидеть, как отображаются уведомления. уведомления-карты

Рисунок 1. Одно и то же уведомление, отображаемое на телефоне и на часах.

Для достижения наилучших результатов используйте один из подклассов NotificationCompat.Style .

Примечание: использование RemoteViews удаляет уведомления с пользовательских макетов, и на носимом устройстве отображаются только текст и значки.

Рекомендуемые уведомления для носимых устройств

Используйте расширяемые уведомления в качестве отправной точки для всех уведомлений, поскольку это отличный способ привлечь пользователей носимых устройств. Свернутое состояние отображается в области уведомлений для короткого, скользящего опыта. Если пользователь нажимает на него, уведомление расширяется, открывая захватывающий, прокручиваемый опыт дополнительного контента и действий.

Вы можете создать расширяемое уведомление так же, как и на мобильном устройстве, используя любой из подклассов NotificationCompat.Style . Например, стандартное уведомление с использованием NotificationCompat.MessagingStyle выглядит так: расширяемое уведомление

Рисунок 2. Пример уведомления MessagingStyle на Wear OS.

Вы можете видеть, что уведомление имеет несколько действий, сгруппированных в нижней части развернутого состояния.

Примеры NotificationCompat.BigPictureStyle , NotificationCompat.BigTextStyle , NotificationCompat.InboxStyle и NotificationCompat.MessagingStyle смотрите в примере уведомлений на GitHub.

Совет: Если ваши уведомления включают действие «ответить», например, для приложения обмена сообщениями, вы можете улучшить поведение уведомления. Например, вы можете включить голосовой ввод ответов непосредственно с носимых устройств или предопределенные текстовые ответы с помощью setChoices() . Для получения дополнительной информации прочтите раздел Добавить кнопку ответа .

Избегайте дублирования уведомлений

По умолчанию уведомления передаются из сопутствующего приложения телефона на любые сопряженные часы. Это отличный вариант, если у вас не установлено приложение для носимых устройств.

Однако если вы создадите отдельное приложение для часов и сопутствующее приложение для телефона, приложения будут создавать дублирующие уведомления.

Wear OS предоставляет способ остановить дублирование уведомлений с помощью API Bridging. Это особенно важно для приложений на устройствах под управлением Wear OS 5 или выше, поскольку некоторые уведомления, которые можно закрыть на мобильном устройстве, нельзя закрыть на устройстве Wear OS. Для получения дополнительной информации прочтите раздел Параметры Bridging для уведомлений .

Добавьте в уведомление функции, характерные для носимых устройств

Если вам нужно добавить в уведомление функции, специфичные для носимых устройств, например, скрыть значок приложения из уведомления на носимом устройстве или позволить пользователям диктовать текстовый ответ с помощью голосового ввода, вы можете использовать класс NotificationCompat.WearableExtender для указания параметров. Чтобы использовать этот API, выполните следующие действия:

  1. Создайте экземпляр WearableExtender , установив параметры уведомления, специфичные для носимого устройства.
  2. Создайте экземпляр NotificationCompat.Builder , задав нужные свойства для вашего уведомления, как описано ранее в этом руководстве.
  3. Вызовите extend() для уведомления и передайте WearableExtender . Это применит параметры носимых устройств к уведомлению.
  4. Вызовите build() для создания уведомления.

Примечание: Если вы используете NotificationManager фреймворка, некоторые функции NotificationCompat.WearableExtender не работают, поэтому обязательно используйте NotificationCompat .

Вы можете синхронизировать отмену или удаление уведомлений на всех устройствах пользователя. Чтобы синхронизировать удаление, используйте метод setDismissalId() . Для каждого уведомления передайте глобальный уникальный идентификатор в виде строки при вызове setDismissalId() . Когда уведомление удаляется, все остальные уведомления с тем же идентификатором удаления удаляются на часах и на сопутствующем телефоне. Чтобы получить идентификатор удаления, используйте getDismissalId() .

Укажите действия, доступные только для носимых устройств

Если вы хотите, чтобы на часах и телефоне были доступны разные действия, используйте WearableExtender.addAction() . После добавления действия с помощью этого метода носимое устройство не будет отображать никаких других действий, добавленных с помощью NotificationCompat.Builder.addAction() . Действия, добавленные с помощью WearableExtender.addAction() отображаются только на носимом устройстве, а не на телефоне.

Запустите приложение для телефона с носимого устройства

Если вы используете мостовые уведомления, любое уведомление автоматически включает кнопку для запуска приложения на телефоне. Однако, если вы используете локальное уведомление, созданное на часах, используйте следующие шаги для создания кнопки, которая запускает приложение на телефоне:

  1. Создайте новое Activity , расширяющее ConfirmationActivity .
  2. Используйте RemoteActivityHelper в новом Activity для запуска приложения для телефона.
  3. При создании Intent запустить Activity из уведомления установите для дополнительного параметра EXTRA_ANIMATION_TYPE значение OPEN_ON_PHONE_ANIMATION .
Такой подход направляет пользователя к взаимодействию на своем телефоне и соответствует требованиям платформы к запуску фоновых процессов.

Примечание: Вы не можете использовать BroadcastReceiver в качестве цели действия уведомления.