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 a Modelo de notificação do CallStyle para diferenciar as notificações de chamada das e outros tipos de notificações. Use este modelo para criar mensagens recebidas ou notificações de chamadas em andamento. O modelo é compatível com notificações de formato grande que incluam informações sobre o autor da chamada e as ações necessárias, como atender ou chamadas em espera.

Como as chamadas recebidas e em andamento são eventos de alta prioridade, essas notificações receber prioridade máxima na aba de notificações. Essa classificação também permite que para encaminhar essas chamadas priorizadas para outros dispositivos.

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

  • Atender ou Recusar chamadas recebidas.
  • Desligue 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 saber mais sobre os princípios de design de notificações, consulte Notificações.

Notificações de estilo de ligação com botões rotulados
Figura 1. Modelo CallStyle para chamadas 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 podem ser transmitidos entre diferentes aplicativos e processos. O sistema é responsável por gerenciar o ciclo de vida do token e garantir que PendingIntent poderá ser usada mesmo que o app que o criou não esteja mais em execução. Ao dar um PendingIntent a outro app, você está concedendo a permissão para executar a operação especificada, como recusar ou responder. Essa permissão será concedida mesmo se o app que criou a intent não está em execução no momento. Para mais informações, consulte a documentação de referência para PendingIntent.

A partir do Android 14 (nível 34 da API), é possível configurar notificações de chamada para não ser dispensável. Para fazer isso, use as notificações CallStyle com o De Notification.FLAG_ONGOING_EVENT a Notification.Builder#setOngoing(true)

Confira abaixo exemplos de como usar vários métodos com o CallStyle notificação.

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 de chamada para um receber uma ligação.

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 de chamada para um 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 ligação.

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 notificações do CallStyle na versão 30 ou anterior da API a um serviços em primeiro plano para atribuir a eles a alta classificação que recebem na API nível 31 ou mais recente. Além disso, notificações CallStyle na versão 30 da API ou anteriores podem conseguir uma classificação semelhante ao marcar a notificação como colorido usando o método setColorized().

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