Benachrichtigung im Anrufstil für Anruf-Apps erstellen

Unter Android 12.0 (API-Level 31) und höher stellt das System die Benachrichtigungsvorlage CallStyle bereit, um Anrufbenachrichtigungen von anderen Benachrichtigungstypen zu unterscheiden. Verwenden Sie diese Vorlage, um Benachrichtigungen für eingehende oder laufende Anrufe zu erstellen. Die Vorlage unterstützt Benachrichtigungen im Großformat, die Anruferinformationen und erforderliche Aktionen wie das Annehmen oder Ablehnen von Anrufen enthalten.

Da eingehende und laufende Anrufe Ereignisse mit hoher Priorität sind, werden diese Benachrichtigungen in der Benachrichtigungsleiste ganz oben angezeigt. Durch diese Priorisierung kann das System diese Anrufe auch an andere Geräte weiterleiten.

Die Benachrichtigungsvorlage CallStyle enthält die folgenden erforderlichen Aktionen:

  • Annehmen oder Ablehnen bei eingehenden Anrufen.
  • Auflegen bei laufenden Anrufen.
  • Annehmen oder Auflegen für die Anrufer-ID.

Aktionen in diesem Stil werden als Schaltflächen angezeigt. Das System fügt automatisch passende Symbole und Text hinzu. Das manuelle Labeling der Schaltflächen wird nicht unterstützt. Weitere Informationen zu den Designprinzipien für Benachrichtigungen finden Sie unter Benachrichtigungen.

Benachrichtigungen im Anrufstil mit Schaltflächen mit Labels
Abbildung 1. CallStyle-Vorlage für eingehende und laufende Anrufe.

Die erforderlichen Aktionen werden in den folgenden Abschnitten als Intents wie hangupIntent und answerIntent übergeben. Jeder dieser Werte ist ein Verweis auf ein vom System verwaltetes Token. Das Token ist ein einfaches Objekt, das zwischen verschiedenen Apps und Prozessen übergeben werden kann. Das System ist für die Verwaltung der Lebensdauer des Tokens und dafür verantwortlich, dass das PendingIntent auch dann verwendet werden kann, wenn die App, die es erstellt hat, nicht mehr ausgeführt wird. Wenn Sie einer anderen App die PendingIntent erteilen, gewähren Sie ihr die Berechtigung, die angegebene Aktion auszuführen, z. B. Anrufe abzulehnen oder anzunehmen. Diese Berechtigung wird auch dann erteilt, wenn die App, die den Intent erstellt hat, nicht ausgeführt wird. Weitere Informationen finden Sie in der Referenzdokumentation zu PendingIntent.

Ab Android 14 (API-Level 34) können Sie Anrufbenachrichtigungen so konfigurieren, dass sie nicht geschlossen werden können. Verwenden Sie dazu CallStyle-Benachrichtigungen mit Notification.FLAG_ONGOING_EVENT über Notification.Builder#setOngoing(true).

Im Folgenden finden Sie Beispiele für die Verwendung verschiedener Methoden mit der CallStyle-Benachrichtigung.

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

Eingehender Anruf

Verwenden Sie die Methode forIncomingCall(), um eine Benachrichtigung im Anrufstil für einen eingehenden Anruf zu erstellen.

// 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)

Aktiver Anruf

Verwenden Sie die Methode forOngoingCall(), um eine Benachrichtigung im Anrufstil für einen laufenden Anruf zu erstellen.

// 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)

Anrufe filtern

Verwenden Sie die Methode forScreeningCall(), um eine Benachrichtigung im Anrufstil für die Anrufer-ID zu erstellen.

// 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)

Kompatibilität mit mehr Android-Versionen

Verknüpfen Sie CallStyle-Benachrichtigungen in API-Version 30 oder niedriger mit einem Dienst im Vordergrund, um ihnen den hohen Rang zuzuweisen, den sie in API-Level 31 oder höher erhalten. Außerdem können CallStyle-Benachrichtigungen in API-Version 30 oder niedriger einen ähnlichen Rang erreichen, indem Sie die Benachrichtigung mit der Methode setColorized() als farbig markieren.

Verwenden Sie die Telecom APIs mit CallStyle-Benachrichtigungen. Weitere Informationen finden Sie unter Übersicht über das Telekommunikations-Framework.