Créer une notification de style d'appel pour les applications d'appel

Sur Android 12.0 (niveau d'API 31) ou version ultérieure, le système fournit le modèle de notification CallStyle pour distinguer les notifications d'appel des autres types de notifications. Utilisez ce modèle pour créer des notifications d'appels entrants ou en cours. Le modèle est compatible avec les notifications grand format qui incluent des informations sur l'appelant et les actions requises, comme répondre ou refuser un appel.

Étant donné que les appels entrants et en cours sont des événements à priorité élevée, ces notifications sont prioritaires dans le volet des notifications. Ce classement permet également au système de transférer ces appels prioritaires vers d'autres appareils.

Le modèle de notification CallStyle inclut les actions requises suivantes:

  • Décrocher ou Refuser pour les appels entrants.
  • Raccrochez pour les appels en cours.
  • Répondez ou Raccrochez pour filtrer les appels.

Les actions de ce style apparaissent sous forme de boutons, le système ajoutant automatiquement les icônes et le texte appropriés. Il n'est pas possible d'étiqueter manuellement les boutons. Pour en savoir plus sur les principes de conception des notifications, consultez la section Notifications.

Notifications de style d'appel avec des boutons libellés
Figure 1. Modèle CallStyle pour les appels entrants et en cours

Les actions requises sont transmises en tant qu'intents, telles que hangupIntent et answerIntent dans les sections suivantes. Chacun de ces éléments fait référence à un jeton géré par le système. Le jeton est un objet léger qui peut être transmis entre différents processus et applications. Le système est chargé de gérer la durée de vie du jeton et de s'assurer que PendingIntent est utilisable même si l'application qui l'a créé n'est plus en cours d'exécution. Lorsque vous attribuez une PendingIntent à une autre application, vous lui accordez l'autorisation d'effectuer l'opération spécifiée, par exemple le refus ou la réponse. Cette autorisation est accordée même si l'application qui a créé l'intent n'est pas en cours d'exécution. Pour en savoir plus, consultez la documentation de référence sur PendingIntent.

À partir d'Android 14 (niveau d'API 34), vous pouvez configurer les notifications d'appel pour qu'elles ne puissent pas être ignorées. Pour ce faire, utilisez les notifications CallStyle avec le Notification.FLAG_ONGOING_EVENT à Notification.Builder#setOngoing(true).

Voici des exemples d'utilisation de différentes méthodes avec la notification 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();

Appel entrant

Utilisez la méthode forIncomingCall() afin de créer une notification de style d'appel pour un appel entrant.

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

Appel en cours

Utilisez la méthode forOngoingCall() afin de créer une notification de style d'appel pour un appel en cours.

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

Filtrer un appel

Utilisez la méthode forScreeningCall() pour créer une notification de style d'appel afin de filtrer un appel.

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

Assurer la compatibilité avec plus de versions d'Android

Associez les notifications CallStyle sur les versions 30 ou antérieures de l'API à un service de premier plan afin de leur attribuer le classement élevé qui leur est attribué au niveau d'API 31 ou ultérieur. De plus, les notifications CallStyle sur la version 30 ou antérieure de l'API peuvent obtenir un classement similaire en les marquant comme colorées à l'aide de la méthode setColorized().

Utiliser les API Telecom avec les notifications CallStyle. Pour en savoir plus, consultez la présentation du framework Telecom.