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

Sur Android 12.0 (niveau d'API 31) et versions ultérieures, 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 les informations sur l'appelant et les actions requises, comme répondre à un appel ou le refuser.

Étant donné que les appels entrants et en cours sont des événements de 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 :

  • Répondre ou Refuser pour les appels entrants.
  • Raccrocher pour les appels en cours.
  • Répondre ou Raccrocher pour le filtrage d'appels.

Les actions de ce style s'affichent sous forme de boutons, le système ajoutant automatiquement les icônes et le texte appropriés. L'étiquetage manuel des boutons n'est pas possible. Pour en savoir plus sur les principes de conception des notifications, consultez Notifications.

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

Les actions requises sont transmises en tant qu'intents, tels que hangupIntent et answerIntent dans les sections suivantes. Chacun d'eux est une référence à un jeton géré par le système. Le jeton est un objet léger qui peut être transmis entre différentes applications et différents processus. Le système est chargé de gérer la durée de vie du jeton et de s'assurer que le PendingIntent est utilisable même si l'application qui l'a créé n'est plus en cours d'exécution. Lorsque vous accordez un PendingIntent à une autre application, vous l'autorisez à effectuer l'opération spécifiée, par exemple refuser ou répondre. 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 Notification.FLAG_ONGOING_EVENT via Notification.Builder#setOngoing(true).

Voici des exemples d'utilisation de différentes méthodes avec la notification CallStyle.

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

Appel entrant

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

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

Appel en cours

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

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

Filtrer un appel

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

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

Assurer la compatibilité avec davantage de versions d'Android

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

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