Tworzenie powiadomień o stylu połączeń w aplikacjach do połączeń

W Androidzie 12.0 (interfejs API na poziomie 31) i nowszych system udostępnia szablon powiadomienia CallStyle, aby odróżnić powiadomienia o połączeniach od innych typów powiadomień. Użyj tego szablonu, aby utworzyć powiadomienia o połączeniach przychodzących lub trwających. Szablon obsługuje powiadomienia w dużym formacie, które zawierają informacje o rozmówcy i wymagane działania, takie jak odebranie lub odrzucenie połączenia.

Ponieważ połączenia przychodzące i trwające są wydarzeniami o wysokim priorytecie, te powiadomienia mają najwyższy priorytet w obszarze powiadomień. Ten ranking umożliwia też systemowi przekazywanie tych połączeń o wysokim priorytecie na inne urządzenia.

Szablon powiadomienia CallStyle zawiera te wymagane działania:

  • Odbierz lub Odrzuć w przypadku połączeń przychodzących.
  • Rozłącz się w przypadku trwających połączeń.
  • Odbierz lub Rozłącz się w przypadku sprawdzania połączeń.

Działania w tym stylu są wyświetlane jako przyciski, a system automatycznie dodaje odpowiednie ikony i tekst. Ręczne etykietowanie przycisków nie jest obsługiwane. Więcej informacji o zasadach projektowania powiadomień znajdziesz w artykule Powiadomienia.

Powiadomienia w stylu połączeń z przyciskami z etykietami
Rysunek 1. Szablon CallStyle dla połączeń przychodzących i trwających.

Wymagane działania są przekazywane jako intencje, takie jak hangupIntent i answerIntent w kolejnych sekcjach. Każda z nich jest odniesieniem do tokena utrzymywanego przez system. Token to lekki obiekt, który można przekazywać między różnymi aplikacjami i procesami. System jest odpowiedzialny za zarządzanie okresem ważności tokena i zapewnienie, że PendingIntent jest użyteczny nawet wtedy, gdy aplikacja, która go utworzyła, nie jest już uruchomiona. Gdy przekazujesz innej aplikacji PendingIntent, przyznajesz jej uprawnienia do wykonania określonej operacji, np. odrzucenia lub odebrania. To uprawnienie jest przyznawane nawet wtedy, gdy aplikacja, która utworzyła intencję, nie jest uruchomiona. Więcej informacji znajdziesz w dokumentacji referencyjnej PendingIntent.

Od Androida 14 (interfejs API na poziomie 34) możesz skonfigurować powiadomienia o połączeniach tak, aby nie można ich było odrzucić. Aby to zrobić, użyj CallStyle powiadomień z Notification.FLAG_ONGOING_EVENT przez Notification.Builder#setOngoing(true).

Poniżej znajdziesz przykłady użycia różnych metod z powiadomieniem CallStyle.

// Create a new call, setting incoming caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Połączenie przychodzące

Aby utworzyć powiadomienie w stylu połączenia przychodzącego, użyj metody forIncomingCall().

// For demonstrative purposes only, should use a well-defined Intents.
val contentIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val declineIntent =
    PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val hangupIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
val answerIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_IMMUTABLE)
// Create a call style notification for an incoming call.
val builderForIncomingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forIncomingCall(incomingCaller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

Trwa rozmowa

Aby utworzyć powiadomienie w stylu połączenia trwającego, użyj metody forOngoingCall().

// Create a call style notification for an ongoing call.
val builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent))
    .addPerson(caller)

Filtrowanie połączenia

Aby utworzyć powiadomienie w stylu połączenia do sprawdzenia, użyj metody forScreeningCall().

// Create a call style notification for screening a call.
val builder = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(R.drawable.ic_logo)
    .setStyle(
        NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(caller)

Zapewnianie zgodności z większą liczbą wersji Androida

Powiąż powiadomienia CallStyle w wersjach interfejsu API 30 lub starszych z usługą działającą na pierwszym planie, aby przypisać im wysoki priorytet, jaki mają w interfejsie API na poziomie 31 lub nowszym. Dodatkowo powiadomienia CallStyle w interfejsie API w wersji 30 lub starszej mogą uzyskać podobny priorytet, oznaczając powiadomienie jako kolorowe za pomocą metody setColorized().

Używaj interfejsów API Telecom z powiadomieniami CallStyle. Więcej informacji znajdziesz w artykule Omówienie platformy Telecom.