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.
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.