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

Na Androidzie 12.0 (poziom interfejsu API 31) i nowszych system udostępnia szablon powiadomienia CallStyle, który pozwala odróżnić powiadomienia o połączeniach od innych typów powiadomień. Użyj tego szablonu do tworzenia przychodzących i trwających powiadomień o połączeniach. Szablon obsługuje powiadomienia w dużym formacie, które zawierają informacje o rozmówcy i wymagane działania, takie jak odbieranie lub odrzucanie połączeń.

Połączenia przychodzące i trwające mają wysoki priorytet, więc powiadomienia te mają najwyższy priorytet w obszarze powiadomień. Ten ranking umożliwia też systemowi przekazywanie tych priorytetowych połączeń do innych urządzeń.

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ń.
  • Kliknij Odbierz lub Rozłącz się, aby filtrować połączenia.

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

Powiadomienia o stylu połączeń z przyciskami oznaczonymi etykietami
Rysunek 1. Szablon CallStyle (Styl połączenia) dla połączeń przychodzących i trwających.

W kolejnych sekcjach wymagane działania, takie jak hangupIntent i answerIntent, są przekazywane jako intencje. Każdy z nich jest odniesieniem do tokena utrzymywanego przez system. Token to niewielki obiekt, który może być przekazywany między różnymi aplikacjami i procesami. System odpowiada za zarządzanie czasem trwania tokena i zapewnianie użyteczności tokena PendingIntent nawet wtedy, gdy aplikacja, która go utworzyła, nie jest już uruchomiona. Przyznając innej aplikacji uprawnienie PendingIntent, przyznajesz jej uprawnienia do wykonania określonej operacji, takiej jak odrzucenie lub udzielenie odpowiedzi. To uprawnienie jest przyznawane, nawet jeśli aplikacja, która utworzyła intencję, nie jest obecnie uruchomiona. Więcej informacji znajdziesz w dokumentacji referencyjnej PendingIntent.

Począwszy od Androida 14 (poziom interfejsu API 34) możesz skonfigurować powiadomienia o wywołaniach w taki sposób, aby nie można było ich zamknąć. Aby to zrobić, użyj powiadomień CallStyle w Notification.FLAG_ONGOING_EVENT do Notification.Builder#setOngoing(true).

Poniżej znajdziesz przykłady korzystania z różnych metod z powiadomieniem CallStlye.

Kotlin

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

Java

// Create a new call with the user as the caller.
Person incomingCaller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Połączenie przychodzące

Metoda forIncomingCall() pozwala utworzyć powiadomienie o stylu połączenia dla połączenia przychodzącego.

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incomingCaller);

Trwa rozmowa

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

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOngoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Filtrowanie połączenia

Aby utworzyć powiadomienie stylu połączenia na potrzeby filtrowania połączenia, użyj metody forScreeningCall().

Kotlin

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

Java

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Zgodność z większą liczbą wersji Androida

Powiąż powiadomienia CallStyle w interfejsie API w wersji 30 lub starszej z usługą na pierwszym planie, aby przypisać im wysoką pozycję w rankingu API na poziomie 31 lub nowszym. Dodatkowo powiadomienia CallStyle w interfejsie API w wersji 30 lub starszej mogą osiągnąć podobną pozycję w rankingu, gdy powiadomienie zostanie oznaczone jako kolorowe (za pomocą metody setColorized()).

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