No Android 12.0 (nível 31 da API) e em versões mais recentes, o sistema fornece o modelo de notificação
CallStyle para distinguir notificações de chamada de
outros tipos de notificações. Use esse modelo para criar notificações de chamadas recebidas ou
em andamento. O modelo é compatível com notificações em formato grande
que incluem informações do autor da chamada e ações necessárias, como atender ou
recusar ligações.
Como as chamadas recebidas e em andamento são eventos de alta prioridade, essas notificações recebem a prioridade máxima na aba de notificações. Essa classificação também possibilita que o sistema encaminhe essas chamadas prioritárias para outros dispositivos.
O modelo de notificação CallStyle inclui as seguintes ações obrigatórias:
- Atender ou Recusar para chamadas recebidas.
- Desligue as chamadas em andamento.
- Atender ou Desligar para a triagem de chamadas.
As ações nesse estilo aparecem como botões, e o sistema adiciona automaticamente ícones e texto apropriados. O rotulamento manual dos botões é indisponí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 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 um PendingIntent a outro app, você está dando a ele 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 saber mais, 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 notificações de chamada
para que não possam ser dispensadas. Para isso, use as notificações CallStyle com o
Notification.FLAG_ONGOING_EVENT por
Notification.Builder#setOngoing(true).
Confira a seguir exemplos de como usar vários métodos com a notificação CallStyle.
// Create a new call, setting incoming 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
chamada recebida.
// 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)
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 builderForOngoingCall = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forOngoingCall(callerAtOtherEnd, hangupIntent)) .addPerson(caller)
Filtrar uma ligação
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 = NotificationCompat.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(R.drawable.ic_logo) .setStyle( NotificationCompat.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(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 classificação alta que recebem no nível
31 ou mais recente da API. Além disso, as notificações CallStyle na versão 30 da API
ou anterior 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
Visão geral do framework Telecom.