Уведомления на часах используют те же API и имеют ту же структуру, что и уведомления на телефонах.
Уведомления могут появляться на часах двумя способами:
- Мобильное приложение создает уведомление, и система автоматически передает его на часы.
- Приложение для носимых устройств создает уведомление.
В обоих случаях для создания уведомлений используется класс NotificationCompat.Builder. При создании уведомлений с помощью класса Builder система сама позаботится о том, чтобы они отображались правильно. Например, когда вы отправляете уведомление из мобильного приложения, оно появляется в виде карточки в ленте уведомлений.
Ниже приведен пример того, как выглядят уведомления.
Для достижения наилучших результатов используйте один из подклассов NotificationCompat.Style.
Примечание.
При использовании RemoteViews
уведомления теряют специальные макеты, и на носимом устройстве отображаются только текст и значки.
Примечание.
Уведомления с полноэкранными интентами (setFullScreenIntent())
и разрешение USE_FULL_SCREEN_INTENT
не поддерживаются в Wear OS.
Рекомендуемые уведомления для носимых устройств
Используйте разворачиваемые уведомления в качестве основы для всех уведомлений, поскольку они отлично подходят для взаимодействия с пользователями носимых устройств. В свернутом виде уведомление показывается в панели уведомлений, чтобы пользователь мог быстро его просмотреть. Если пользователь нажмет на него, уведомление развернется и откроется дополнительный контент и действия.
Вы можете создать разворачиваемое уведомление так же, как на мобильном устройстве, используя любой из подклассов NotificationCompat.Style. Например, стандартное уведомление с использованием тега NotificationCompat.MessagingStyle выглядит так:
MessagingStyle на устройстве Wear OS.
Внизу уведомления в развернутом виде можно увидеть несколько действий.
Совет. Если в уведомлении есть действие "Ответить", например в приложении для обмена сообщениями, вы можете улучшить его поведение. Например, вы можете включить голосовой ввод ответов прямо на носимом устройстве или использовать заранее заданные текстовые ответы с помощью setChoices().
Подробнее о том, как добавить кнопку ответа…
Как избежать дублирования уведомлений
По умолчанию уведомления передаются из сопутствующего приложения на телефоне на все подключенные часы. Это хороший вариант, если у вас не установлено приложение для носимого устройства.
Однако если вы создадите отдельное приложение для часов и сопутствующее приложение для телефона, то будете получать дублирующиеся уведомления.
В Wear OS есть API, которые позволяют предотвратить дублирование уведомлений. Это особенно важно для приложений на устройствах с Wear OS 5 или более поздней версии, поскольку некоторые уведомления, которые можно закрыть на мобильном устройстве, нельзя закрыть на устройстве Wear OS. Подробнее о вариантах передачи уведомлений…
Как добавить в уведомление функции для носимых устройств
Если вам нужно добавить в уведомление функции, предназначенные для носимых устройств, используйте класс
NotificationCompat.WearableExtender, чтобы указать параметры.
Чтобы использовать этот API, выполните следующие действия:
Примечание.
Если вы используете фреймворк NotificationManager, некоторые функции из
NotificationCompat.WearableExtender не будут работать. Поэтому используйте
NotificationCompat.
В этом примере показано, как задать действие для Wear в уведомлении и
идентификатор для закрытия. Когда уведомление закрывается, все остальные уведомления с тем же идентификатором закрытия удаляются на часах и связанном телефоне. Чтобы получить идентификатор отклонения, используйте метод
getDismissalId().
// This intent will be fired as a result of the user clicking the "Open on watch" action. // However, it executes on the phone, not on the watch. Typically, the Activity should then use // RemoteActivityHelper to then launch the correct activity on the watch. val intent = Intent(context, LaunchOnWearActivity::class.java) val wearPendingIntent = PendingIntent.getActivity( context, wearRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val openOnWatchAction = NotificationCompat.Action.Builder( R.drawable.watch, "Open on watch", wearPendingIntent ) .build() val wearableExtender = NotificationCompat.WearableExtender() // This action will only be shown on the watch, not on the phone. // Actions added to the Notification builder directly will not be shown on the watch, // because one or more actions are defined in the WearableExtender. .addAction(openOnWatchAction) // This synchronizes dismissals between watch and phone. .setDismissalId(chatId) val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend(wearableExtender) .build()
Как запустить приложение "Телефон" на носимом устройстве
Если вы используете переадресованные уведомления, в каждом из них будет кнопка для запуска приложения на телефоне. Если вы используете локальное уведомление, созданное на часах, выполните следующие действия, чтобы создать кнопку, запускающую приложение на телефоне:
- Создайте новый
Activity, который расширяетConfirmationActivity. - Используйте
RemoteActivityHelperв новом приложенииActivity, чтобы запустить приложение "Телефон". - При создании
Intentдля запускаActivityиз уведомления задайте для параметраEXTRA_ANIMATION_TYPEзначениеOPEN_ON_PHONE_ANIMATION.
Этот подход позволяет пользователю взаимодействовать с телефоном и соответствует требованиям платформы к запуску фоновых процессов.
Примечание. В качестве цели действия уведомления нельзя использовать BroadcastReceiver.