Cómo crear una notificación con estilo de llamada para apps de llamadas

En Android 12.0 (nivel de API 31) y versiones posteriores, el sistema proporciona la Plantilla de notificación CallStyle para distinguir las notificaciones de llamadas de otros tipos de notificaciones. Usa esta plantilla para crear registros de entrada o notificaciones de llamadas en curso. La plantilla admite notificaciones en formato grande que incluyen información de la persona que llama y las acciones requeridas, como responder o el rechazo de llamadas.

Dado que las llamadas entrantes y en curso son eventos de alta prioridad, estas notificaciones para recibir la prioridad principal en el panel de notificaciones. Esta clasificación también permite para reenviar esas llamadas con prioridad a otros dispositivos.

La plantilla de notificación CallStyle incluye las siguientes acciones obligatorias:

  • Responder o Rechazar cuando recibas llamadas entrantes
  • Colgar para las llamadas en curso.
  • Responde o coloca para filtrar la llamada.

Las acciones en este estilo aparecen como botones, y el sistema agrega automáticamente los íconos y el texto adecuados. No se admite el etiquetado manual de los botones. Para obtener más información sobre los principios de diseño de notificaciones, consulta Notificaciones.

Notificaciones de estilo de llamada con botones etiquetados
Figura 1: Plantilla de CallStyle para llamadas entrantes y en curso

Las acciones requeridas se pasan como intents, por ejemplo, hangupIntent y answerIntent en las siguientes secciones. Cada una de ellas hace referencia a un token que mantiene el sistema. El token es un objeto ligero que se pueden pasar entre diferentes apps y procesos. El sistema es responsable de administrar el ciclo de vida del token y garantizar que el PendingIntent se puede usar incluso si la app que lo creó ya no lo es. en ejecución. Cuando le asignas un PendingIntent a otra app, otorgas el permiso para realizar la operación especificada, como rechazar o responder. Este permiso se otorga incluso si la app que creó el intent no se está ejecutando actualmente. Para obtener más información, consulta la documentación de referencia para PendingIntent.

A partir de Android 14 (nivel de API 34), puedes configurar las notificaciones de llamadas para que no se puedan descartar. Para hacerlo, usa las notificaciones de CallStyle con la Notification.FLAG_ONGOING_EVENT a Notification.Builder#setOngoing(true)

A continuación, se muestran ejemplos de cómo usar varios métodos con CallStyle. notificación.

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

Llamada entrante

Usa el método forIncomingCall() para crear una notificación con estilo de llamada para un llamada entrante.

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

Llamada en curso

Usa el método forOngoingCall() para crear una notificación con estilo de llamada para un llamada en curso.

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

Cómo filtrar una llamada

Usa el método forScreeningCall() para crear una notificación con estilo de llamada para filtrar una llamada.

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

Cómo brindar compatibilidad con más versiones de Android

Asociar las notificaciones de CallStyle en la API 30 o versiones anteriores con un servicio en primer plano para asignarles la clasificación alta que se les otorga en la API nivel 31 o posterior. Además, notificaciones de CallStyle en la versión de API 30 o anteriores pueden obtener una clasificación similar marcando la notificación como colorearse con el método setColorized().

Usa las APIs de Telecom con notificaciones de CallStyle. Para obtener más información, consulta Descripción general del marco de trabajo de las telecomunicaciones.