En Android 12.0 (nivel de API 31) y versiones posteriores, el sistema proporciona la
CallStyle plantilla de notificación para distinguir las notificaciones de llamadas de
otros tipos de notificaciones. Usa esta plantilla para crear notificaciones de llamadas entrantes o en curso. La plantilla admite notificaciones de gran formato que incluyen información de la persona que llama y acciones requeridas, como responder o rechazar llamadas.
Debido a que las llamadas entrantes y en curso son eventos de alta prioridad, estas notificaciones reciben la máxima prioridad en el panel lateral de notificaciones. Esta clasificación también permite que el sistema desvíe estas llamadas con prioridad a otros dispositivos.
La plantilla de notificación CallStyle incluye las siguientes acciones requeridas:
- Responder o Rechazar para llamadas entrantes
- Colgar para llamadas en curso
- Responder o Colgar para el filtrado de llamadas
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.
Las acciones requeridas se pasan como intents, como hangupIntent y answerIntent en las siguientes secciones. Cada uno de ellos es una referencia a un token que mantiene el sistema. El token es un objeto liviano que se puede pasar entre diferentes apps y procesos. El sistema es responsable de administrar la vida útil del token y garantizar que PendingIntent se pueda usar incluso si la app que lo creó ya no se está ejecutando. Cuando le das a otra app un PendingIntent, le 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. Para obtener más información, consulta la documentación de referencia de
PendingIntent.
A partir de Android 14 (nivel de API 34), puedes configurar las notificaciones de llamadas para que no se puedan descartar. Para ello, usa CallStyle notificaciones con el
Notification.FLAG_ONGOING_EVENT a través de
Notification.Builder#setOngoing(true).
A continuación, se muestran ejemplos del uso de varios métodos con la notificación CallStyle.
// Create a new call, setting incoming caller. val incomingCaller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Llamada entrante
Usa el método forIncomingCall() para crear una notificación con estilo para una llamada entrante.
// 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)
Llamada en curso
Usa el método forOngoingCall() para crear una notificación con estilo para una llamada en curso.
// 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)
Filtrar una llamada
Usa el método forScreeningCall() para crear una notificación con estilo para filtrar una llamada.
// 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)
Proporciona compatibilidad en más versiones de Android
Asocia las notificaciones CallStyle en las versiones de API 30 o anteriores con un servicio en primer plano para asignarles el rango alto que se les otorga en el nivel de API 31 o versiones posteriores. Además, las notificaciones CallStyle en la versión de API 30
o anteriores pueden lograr una clasificación similar marcando la notificación como
coloreada con el método setColorized().
Usa las APIs de Telecom con notificaciones CallStyle. Para obtener más información, consulta
Descripción general del framework de Telecom.