Creare una notifica di stile di chiamata per le app di chiamata

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 le notifiche di grande formato che includono le informazioni sul 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 con priorità 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.

Notifiche in stile chiamata con pulsanti etichettati
Figura 1. Modello CallStyle per le chiamate in arrivo e in corso.

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 the user as the caller.
  val incomingCaller = Person.Builder()
      .setName("Jane Doe")
      .setImportant(true)
      .build()

Chiamata in arrivo

Utilizza il metodo forIncomingCall() per creare una notifica in stile chiamata per una chiamata in arrivo.

  // 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)

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 builder = Notification.Builder(context, CHANNEL_ID)
      .setContentIntent(contentIntent)
      .setSmallIcon(smallIcon)
      .setStyle(
           Notification.CallStyle.forOngoingCall(caller, hangupIntent))
      .addPerson(second_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 = Notification.Builder(context, CHANNEL_ID)
      .setContentIntent(contentIntent)
      .setSmallIcon(smallIcon)
      .setStyle(
           Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
      .addPerson(second_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().

Utilizzare le API Telecom con le notifiche CallStyle. Per saperne di più, consulta la panoramica del framework per le telecomunicazioni.