Na Androidzie 12.0 (interfejs API na poziomie 31) i nowszych wersjach 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 dzwoniącym i wymagane działania, takie jak odbieranie lub odrzucanie połączeń.
Połączenia przychodzące i trwające są zdarzeniami o wysokim priorytecie, dlatego te powiadomienia mają najwyższy priorytet w obszarze powiadomień. Ten ranking umożliwia też systemowi przekazywanie tych połączeń o wyższym priorytecie na inne urządzenia.
Szablon powiadomienia CallStyle zawiera te wymagane działania:
- Odbierz lub Odrzuć w przypadku połączeń przychodzących.
- Rozłącz w przypadku trwających połączeń.
- Odbierz lub Rozłącz się w przypadku filtrowania połączeń.
Działania w tym stylu wyświetlają się jako przyciski, do których 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 o powiadomieniach.
Wymagane działania są przekazywane jako intencje, takie jak hangupIntent i answerIntent w sekcjach poniżej. Każdy z nich odnosi się do tokena utrzymywanego przez system. Token to lekki obiekt, który można przekazywać między różnymi aplikacjami i procesami. System odpowiada za zarządzanie czasem życia tokena i zapewnienie, że PendingIntent będzie można używać, nawet jeśli aplikacja, która go utworzyła, nie jest już uruchomiona. Gdy przyznasz innej aplikacji uprawnienie PendingIntent, zezwolisz jej na wykonywanie określonych działań, takich jak odrzucanie lub odbieranie połączeń.
To uprawnienie jest przyznawane nawet wtedy, gdy aplikacja, która utworzyła intencję, nie jest uruchomiona. Więcej informacji znajdziesz w dokumentacji referencyjnej dotyczącej PendingIntent.
Od Androida 14 (poziom interfejsu API 34) możesz skonfigurować powiadomienia o połączeniach tak, aby nie można było ich odrzucić. Aby to zrobić, użyj powiadomień CallStyle z Notification.FLAG_ONGOING_EVENT do 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 o połączeniu przychodzącym, 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 dla trwającego połączenia, 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 na potrzeby filtrowania połączeń, 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)
zapewnić zgodność z większą liczbą wersji Androida,
Powiąż powiadomienia CallStyle w interfejsie API w wersji 30 lub starszej z usługą działającą na pierwszym planie, aby przypisać im wysoką rangę, jaką mają w interfejsie API na poziomie 31 lub wyższym. Dodatkowo powiadomienia CallStyle w interfejsie API w wersji 30 lub starszej mogą uzyskać podobną pozycję, jeśli zostaną 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.