Powiadomienia na Wear OS

Powiadomienia na zegarkach korzystają z tych samych interfejsów API i mają taką samą strukturę jak powiadomienia na telefonach.

Powiadomienia mogą pojawiać się na zegarku na 2 sposoby:

  1. Aplikacja mobilna tworzy powiadomienie, a system automatycznie przekazuje je na zegarek.
  2. Aplikacja na urządzenie do noszenia tworzy powiadomienie.

W obu przypadkach do tworzenia powiadomień użyj klasy NotificationCompat.Builder do tworzenia powiadomień. Gdy tworzysz powiadomienia za pomocą klasy konstruktora, system dba o ich prawidłowe wyświetlanie. Na przykład, gdy wysyłasz powiadomienie z aplikacji mobilnej, każde powiadomienie pojawia się jako karta w strumieniu powiadomień.

Aby zobaczyć, jak wyświetlają się powiadomienia, zapoznaj się z tym przykładem.

karty powiadomień

Rysunek 1. To samo powiadomienie wyświetlane na telefonie i zegarku.

Aby uzyskać najlepsze wyniki, użyj jednej z NotificationCompat.Style podklas.

Uwaga: Użycie RemoteViews usuwa z powiadomień niestandardowe układy, a urządzenie do noszenia wyświetla tylko tekst i ikony.

Uwaga: Powiadomienia z intencją pełnoekranową (setFullScreenIntent()) i uprawnienie USE_FULL_SCREEN_INTENT nie są obsługiwane w Wear OS.

Zalecane powiadomienia na urządzenia do noszenia

Jako punkt wyjścia dla wszystkich powiadomień używaj powiadomień rozwijanych, ponieważ są one świetnym sposobem na zaangażowanie użytkowników urządzeń do noszenia. W stanie zwiniętym powiadomienie wyświetla się w panelu powiadomień przez krótki czas, co pozwala na szybkie sprawdzenie. Gdy użytkownik kliknie powiadomienie, rozwinie się ono, wyświetlając dodatkowe treści i działania w trybie pełnoekranowym.

Powiadomienie rozwijane możesz utworzyć tak samo jak na urządzeniu mobilnym, używając dowolnej NotificationCompat.Style podklasy. Na przykład standardowe powiadomienie korzystające z NotificationCompat.MessagingStyle wygląda tak:

rozwijane powiadomienie

Rysunek 2. Przykład powiadomienia MessagingStyle w Wear OS.

Widać, że powiadomienie ma kilka działań ułożonych w stos na dole rozwiniętego stanu.

Wskazówka: jeśli powiadomienia zawierają działanie „Odpowiedz”, np. w aplikacji do obsługi wiadomości, możesz ulepszyć ich działanie. Możesz na przykład włączyć głosowe wprowadzanie tekstu bezpośrednio z urządzenia do noszenia lub wstępnie zdefiniowane odpowiedzi tekstowe za pomocą setChoices(). Więcej informacji znajdziesz w artykule Dodawanie przycisku odpowiedzi.

Unikanie duplikatów powiadomień

Domyślnie powiadomienia są udostępniane z powiązany telefon na wszystkie sparowane zegarki. To świetna opcja, jeśli nie masz zainstalowanej aplikacji na urządzenie do noszenia.

Jeśli jednak utworzysz samodzielną aplikację na zegarek i powiązany telefon, aplikacje będą tworzyć duplikaty powiadomień.

Wear OS umożliwia zatrzymanie duplikatów powiadomień za pomocą interfejsów API do udostępniania powiadomień. Jest to szczególnie ważne w przypadku aplikacji na urządzeniach z Wear OS 5 lub nowszym, ponieważ niektóre powiadomienia, które można odrzucić na urządzeniu mobilnym, nie są odrzucane na urządzeniu z Wear OS. Więcej informacji znajdziesz w artykule Opcje przekazywania powiadomień.

Dodawanie do powiadomienia funkcji specyficznych dla urządzeń do noszenia

Jeśli chcesz dodać do powiadomienia funkcje specyficzne dla urządzeń do noszenia, możesz użyć klasy NotificationCompat.WearableExtender, aby określić opcje. Aby użyć tego interfejsu API:

Uwaga: Jeśli używasz NotificationManager z frameworka, niektóre funkcje z NotificationCompat.WearableExtender nie działają, więc używaj NotificationCompat.

Ten przykład pokazuje, jak ustawić działanie specyficzne dla Wear w powiadomieniu oraz jak ustawić identyfikator odrzucenia . Gdy powiadomienie zostanie odrzucone, wszystkie inne powiadomienia z tym samym identyfikatorem odrzucenia zostaną odrzucone na zegarku i na powiązanym telefonie. Aby pobrać identyfikator odrzucenia, użyj 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()

Uruchamianie aplikacji na telefonie z urządzenia do noszenia

Jeśli używasz przekazywanych powiadomień, każde powiadomienie automatycznie zawiera przycisk uruchamiający aplikację na telefonie. Jeśli jednak używasz powiadomienia lokalnego utworzonego na zegarku, użyj tych czynności, aby utworzyć przycisk uruchamiający aplikację na telefonie:

  1. Utwórz nowy Activity, który rozszerza ConfirmationActivity.
  2. Użyj RemoteActivityHelper w nowej Activity, aby uruchomić aplikację na telefonie.
  3. Podczas tworzenia Intent do uruchomienia Activity z powiadomienia ustaw dodatkowy element EXTRA_ANIMATION_TYPE na OPEN_ON_PHONE_ANIMATION.
To podejście kieruje użytkownika do interakcji na telefonie i jest zgodne z wymaganiami platformy dotyczącymi uruchamiania procesów w tle.

Uwaga: nie możesz używać BroadcastReceiver jako celu działania powiadomienia.