Su Android 12.0 (livello API 31) e versioni successive, il sistema fornisce il modello di notifica
CallStyle per distinguere le notifiche di chiamata da
altri tipi di notifiche. Utilizza questo modello per creare notifiche di chiamate in arrivo o in corso. Il modello supporta notifiche di grande formato
che includono le informazioni del chiamante e le azioni richieste, ad esempio rispondere o
rifiutare le chiamate.
Poiché le chiamate in arrivo e in corso sono eventi con priorità elevata, queste notifiche ricevono la massima priorità nell'area notifiche. Questa classificazione 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 chiamate.
Le azioni in questo stile vengono visualizzate come pulsanti e il sistema aggiunge automaticamente icone e testo appropriati. L'etichettatura manuale dei pulsanti non è supportata. Per ulteriori informazioni sui principi di progettazione delle notifiche, consulta la sezione Notifiche.
Le azioni richieste vengono trasmesse come intent, ad esempio hangupIntent e
answerIntent nelle sezioni seguenti. Ciascuno 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 garantisce che il
PendingIntent sia utilizzabile anche se l'app che lo ha creato non è più
in esecuzione. Quando concedi a un'altra app un PendingIntent, 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 le notifiche di chiamata
in modo che non possano essere chiuse. Per farlo, utilizza le notifiche CallStyle con
Notification.FLAG_ONGOING_EVENT tramite
Notification.Builder#setOngoing(true).
Di seguito sono riportati alcuni 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 con stile di 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 stile 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)
Filtrare 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)
Fornire compatibilità con più versioni di Android
Associa le notifiche CallStyle sulle versioni API 30 o precedenti a un
servizio in primo piano per assegnare loro il rango elevato che viene loro assegnato 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 per le telecomunicazioni.