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 to powiadomienie na zegarek.
  2. Aplikacja na urządzenie do noszenia tworzy powiadomienie.

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

Zapoznaj się z przykładem poniżej, aby zobaczyć, jak wyświetlają się powiadomienia.

notification-cards

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

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

Uwaga: użycie RemoteViews powoduje usunięcie niestandardowych układów z powiadomień, a urządzenie do noszenia wyświetla tylko tekst i ikony.

Zalecane powiadomienia na urządzenia do noszenia

Używaj rozwijanych powiadomień jako punktu wyjścia dla wszystkich powiadomień, 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ń, dzięki czemu można je szybko sprawdzić. Jeśli użytkownik kliknie powiadomienie, rozwinie się ono, wyświetlając dodatkowe treści i działania, które można przewijać.

Możesz utworzyć rozwijane powiadomienie w taki sam sposób jak na urządzeniu mobilnym, używając dowolnej z NotificationCompat.Styleklas podrzędnych. Na przykład standardowe powiadomienie z użyciem elementu NotificationCompat.MessagingStyle wygląda tak:

rozwijane powiadomienie

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

W powiadomieniu w stanie rozwiniętym u dołu widać kilka działań.

Wskazówka: jeśli powiadomienia zawierają działanie „Odpowiedz”, np. w przypadku aplikacji do przesyłania wiadomości, możesz ulepszyć ich działanie. Możesz na przykład włączyć wpisywanie głosowe odpowiedzi bezpośrednio na urządzeniu lub zdefiniować gotowe odpowiedzi tekstowe za pomocą ikony setChoices(). Więcej informacji znajdziesz w artykule Dodawanie przycisku odpowiedzi.

Unikanie duplikowania powiadomień

Domyślnie powiadomienia są udostępniane z aplikacji towarzyszącej na telefonie 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 aplikację towarzyszącą na telefon, będą one generować podwójne powiadomienia.

Wear OS udostępnia interfejsy Bridging API, które umożliwiają zatrzymywanie powielonych 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 przeznaczonych na urządzenia 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 korzystać z tego interfejsu API, wykonaj te czynności:

Uwaga: jeśli używasz platformy NotificationManager, 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, a także ustawić identyfikator odrzucenia. Gdy powiadomienie zostanie odrzucone, wszystkie inne powiadomienia z tym samym identyfikatorem odrzucenia zostaną odrzucone na zegarku i na sparowanym 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 Telefon na urządzeniu do noszenia

Jeśli używasz powiadomień pomostowych, każde powiadomienie automatycznie zawiera przycisk uruchamiający aplikację na telefonie. Jeśli jednak używasz powiadomienia lokalnego utworzonego na zegarku, wykonaj te czynności, aby utworzyć przycisk, który uruchamia aplikację na telefonie:

  1. Utwórz nowy Activity, który rozszerza ConfirmationActivity.
  2. Użyj RemoteActivityHelper w nowym Activity, aby uruchomić aplikację Telefon.
  3. Podczas tworzenia Intent, aby uruchomić Activity z poziomu powiadomienia, ustaw dodatkowy parametr EXTRA_ANIMATION_TYPE na OPEN_ON_PHONE_ANIMATION.
To podejście zachęca użytkownika do interakcji z telefonem 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.