No Android 12.0 (nível 31 da API) e versões mais recentes, o sistema fornece o
CallStyle modelo de notificação para distinguir notificações de chamadas 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 as chamadas recebidas e em andamento são eventos de alta prioridade, essas notificações recebem a maior prioridade na aba de notificações. Essa classificação também permite que o sistema encaminhe essas chamadas prioritárias para outros dispositivos.
O modelo de notificação CallStyle inclui as seguintes ações necessárias:
- Atender ou Recusar para chamadas recebidas.
- Desligar para chamadas em andamento.
- Atender ou Desligar para filtragem de chamadas.
As ações nesse estilo aparecem como botões, com o sistema adicionando automaticamente ícones e texto 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, como hangupIntent e answerIntent nas seções a seguir. Cada uma delas é 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 um PendingIntent a outro app, você está concedendo a ele a permissão para realizar 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. 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 chamadas para não serem dispensáveis. Para fazer isso, use CallStyle notificações com o
Notification.FLAG_ONGOING_EVENT por meio de
Notification.Builder#setOngoing(true).
Confira a seguir exemplos de uso de vários métodos com a notificação CallStyle.
// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
.setName("Jane Doe")
.setImportant(true)
.build()
Ligação recebida
Use o método forIncomingCall() para criar uma notificação de estilo de chamada para uma ligação recebida.
// 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)
Chamada em andamento
Use o método forOngoingCall() para criar uma notificação de estilo de chamada para uma chamada em andamento.
// 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)
Filtrar uma chamada
Use o método forScreeningCall() para criar uma notificação de estilo de chamada para filtrar uma chamada.
// 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)
Oferecer compatibilidade em mais versões do Android
Associe notificações CallStyle em versões 30 ou anteriores da API a um serviço em primeiro plano para atribuir a elas a classificação alta que recebem no nível 31 da API ou mais recente. Além disso, as notificações CallStyle na versão 30
ou anterior da API podem alcançar uma classificação semelhante marcando a notificação como
colorida, usando o método setColorized().
Use as APIs Telecom com notificações CallStyle. Para mais informações, consulte a
Visão geral do framework Telecom.