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 großformatige Benachrichtigungen, 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 mit höchster Priorität angezeigt. Anhand dieser Rangfolge kann das System diese priorisierten Anrufe auch an andere Geräte weiterleiten.

Die Benachrichtigungsvorlage CallStyle enthält die folgenden erforderlichen Aktionen:

  • Annehmen oder Ablehnen für eingehende Anrufe.
  • Auflegen, um laufende Anrufe zu beenden.
  • Annehmen oder Auflegen für den Anruf-Filter.

Aktionen in diesem Stil werden als Schaltflächen angezeigt, wobei das System automatisch entsprechende Symbole und Text hinzufügt. Die manuelle Beschriftung der Tasten wird nicht unterstützt. Weitere Informationen zu den Designprinzipien für Benachrichtigungen findest du unter Benachrichtigungen.

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

Die erforderlichen Aktionen werden als Intents übergeben, z. B. hangupIntent und answerIntent in den folgenden Abschnitten. Jedes davon 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 verantwortlich und sorgt dafür, dass die PendingIntent auch dann verwendet werden kann, wenn die App, die sie erstellt hat, nicht mehr ausgeführt wird. Wenn du einer anderen App eine PendingIntent gibst, erteilst du ihr die Berechtigung, den angegebenen Vorgang auszuführen, z. B. abzulehnen oder zu antworten. Diese Berechtigung wird auch dann gewährt, 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 bis 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

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

Anruf filtern

Verwenden Sie die Methode forScreeningCall(), um eine Benachrichtigung im Anrufstil für die Anrufprüfung 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üpfe CallStyle-Benachrichtigungen in API-Versionen 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 ein ähnliches Ranking erreichen, wenn die Benachrichtigung mit der Methode setColorized() als farbig markiert wird.

Verwende die Telecom APIs mit CallStyle-Benachrichtigungen. Weitere Informationen findest du unter Übersicht über das Telecom-Framework.