Criar uma notificação de estilo de chamada para apps de ligações

No Android 12.0 (nível 31 da API) e versões mais recentes, o sistema oferece o modelo de notificação CallStyle para distinguir as notificações de chamada de outros tipos. Use esse modelo para criar notificações de chamadas recebidas ou em andamento. O modelo oferece suporte a notificações de formato grande que incluem informações do autor da chamada e ações necessárias, como atender ou recusar chamadas.

Como chamadas recebidas e em andamento são eventos de alta prioridade, essas notificações têm prioridade na aba de notificações. Essa classificação também permite que o sistema encaminhe essas chamadas priorizadas para outros dispositivos.

O modelo de notificação CallStyle inclui as seguintes ações obrigatórias:

  • Atender ou Recusar para chamadas recebidas.
  • Desligar para chamadas em andamento.
  • Atender ou Desligar para usar o filtro de ligações.

As ações nesse estilo aparecem como botões, e o sistema adiciona automaticamente ícones e textos adequados. A rotulagem manual dos botões não é compatível. Para mais informações sobre os princípios de design de notificações, consulte Notificações.

Notificações de estilo de ligação com botões identificados
Figura 1. modelo CallStyle para ligações recebidas e em andamento.

As ações necessárias são transmitidas como intents, por exemplo, hangupIntent e answerIntent nas seções a seguir. Cada um deles é uma referência a um token mantido pelo sistema. O token é um objeto leve que pode ser transmitido entre diferentes apps e processos. O sistema é responsável por gerenciar o ciclo de vida do token e garantir que o PendingIntent possa ser usado, mesmo que o app que o criou não esteja mais em execução. Ao conceder a PendingIntent a outro app, você concede a ele a permissão para executar a operação especificada, como recusar ou atender. Essa permissão é concedida mesmo que o app que criou a intent não esteja em execução no momento. Para mais informações, consulte a documentação de referência para PendingIntent.

No Android 14 (nível 34 da API) e versões mais recentes, é possível configurar as notificações de chamada para não serem dispensadas. Para fazer isso, use notificações CallStyle com o Notification.FLAG_ONGOING_EVENT pelo Notification.Builder#setOngoing(true).

Confira abaixo exemplos de como usar vários métodos com a notificação 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();

Chamada recebida

Use o método forIncomingCall() para criar uma notificação de estilo para uma chamada recebida.

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

Chamada em andamento

Use o método forOngoingCall() para criar uma notificação de estilo para uma chamada em andamento.

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

Filtrar uma chamada

Use o método forScreeningCall() para criar uma notificação de estilo de chamada para filtrar uma chamada.

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

Oferecer compatibilidade com mais versões do Android

Associe as notificações CallStyle nas versões 30 ou anteriores da API a um serviço em primeiro plano para atribuir a elas a alta classificação que recebem no nível 31 da API ou versões mais recentes. Além disso, as notificações de CallStyle na API versão 30 ou anteriores podem ter uma classificação semelhante ao marcá-las como coloridas usando o método setColorized().

Usar as APIs Telecom com notificações CallStyle. Para mais informações, consulte a Visão geral do framework de telecomunicação.