Su Android 12.0 (livello API 31) e versioni successive, il sistema fornisce il modello di notifica CallStyle per distinguere gli avvisi di chiamata da altri tipi di notifiche. Utilizza questo modello per creare avvisi di chiamata in arrivo o in corso. Il modello supporta notifiche di grande formato che includono informazioni sul chiamante e azioni richieste, come rispondere o rifiutare le chiamate.
Poiché le chiamate in arrivo e in corso sono eventi ad alta priorità, queste notifiche ricevono la massima priorità nell'area notifiche. Questo ranking consente inoltre al sistema di inoltrare queste chiamate prioritarie ad altri dispositivi.
Il modello di notifica CallStyle include le seguenti azioni obbligatorie:
- Rispondi o Rifiuta per le chiamate in arrivo.
- Riaggancia per le chiamate in corso.
- Rispondi o Riaggancia per il filtro delle chiamate.
Le azioni in questo stile vengono visualizzate come pulsanti, con il sistema che aggiunge automaticamente icone e testo appropriati. L'etichettatura manuale dei pulsanti non è supportata. Per saperne di più sui principi di progettazione delle notifiche, consulta Notifiche.
Le azioni richieste vengono passate come intent, ad esempio hangupIntent e
answerIntent nelle sezioni seguenti. Ognuno di questi è un riferimento a un token gestito dal sistema. Il token è un oggetto leggero che può essere passato tra diverse app e processi. Il sistema è responsabile della gestione della durata del token e di garantire che PendingIntent sia utilizzabile anche se l'app che lo ha creato non è più in esecuzione. Quando concedi un PendingIntent a un'altra app, le concedi l'autorizzazione a eseguire l'operazione specificata, ad esempio rifiutare o rispondere.
Questa autorizzazione viene concessa anche se l'app che ha creato l'intent non è in esecuzione. Per saperne di più, consulta la documentazione di riferimento per
PendingIntent.
A partire da Android 14 (livello API 34), puoi configurare gli avvisi di chiamata in modo che non possano essere ignorati. Per farlo, utilizza le notifiche CallStyle con
Notification.FLAG_ONGOING_EVENT fino a
Notification.Builder#setOngoing(true).
Di seguito sono riportati esempi di utilizzo di vari metodi con la notifica CallStyle.
// Create a new call, setting incoming caller. val incomingCaller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Chiamata in arrivo
Utilizza il metodo forIncomingCall() per creare una notifica di tipo chiamata per una chiamata in arrivo.
// 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)
Chiamata in corso
Utilizza il metodo forOngoingCall() per creare una notifica di tipo chiamata per una chiamata in corso.
// 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)
Filtra una chiamata
Utilizza il metodo forScreeningCall() per creare una notifica in stile chiamata per filtrare una chiamata.
// 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)
Offrire compatibilità con più versioni di Android
Associa le notifiche CallStyle alle versioni API 30 o precedenti con un servizio in primo piano per assegnare loro il ranking elevato che ricevono nel livello API 31 o versioni successive. Inoltre, le notifiche CallStyle sulla versione 30 o precedente dell'API possono ottenere un ranking simile contrassegnando la notifica come colorata, utilizzando il metodo setColorized().
Utilizza le API Telecom con le notifiche CallStyle. Per saperne di più, consulta la panoramica del framework di telecomunicazioni.