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 Modello di notifica di CallStyle per distinguere le notifiche delle chiamate da e altri tipi di notifiche. Utilizza questo modello per creare file in entrata avvisi di chiamata in corso. Il modello supporta le notifiche di grande formato che includono informazioni sul chiamante e le azioni richieste, come rispondere o un calo delle chiamate.

Poiché le chiamate in arrivo e in corso sono eventi ad alta priorità, queste notifiche riceveranno la massima priorità nell'area notifiche. Questo ranking consente inoltre per inoltrare le 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 avviare le chiamate.
  • Rispondi o Riaggancia per il filtro delle 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, vedi Notifiche.

Notifiche relative allo stile di chiamata con pulsanti etichettati
Figura 1. modello CallStyle per le chiamate in arrivo e in corso.

Le azioni richieste vengono passate come intent, ad esempio hangupIntent e answerIntent nelle sezioni seguenti. Ognuno di questi fa riferimento a un gestito dal sistema. Il token è un oggetto leggero possono essere trasferite tra diverse app e processi. Il sistema responsabile della gestione della durata del token e di garantire che PendingIntent è utilizzabile anche se l'app che lo ha creato non è più in esecuzione. Se dai a un'altra app un PendingIntent, concedi l'autorizzazione a eseguire l'operazione specificata, come rifiutare o rispondere. Questa autorizzazione viene concessa anche se l'app che ha creato l'intent non è attualmente in esecuzione. Per ulteriori informazioni, consulta la documentazione di riferimento per PendingIntent.

A partire da Android 14 (livello API 34), puoi configurare le notifiche di chiamata non sia ignorabile. A questo scopo, usa le notifiche di CallStyle con il Da Notification.FLAG_ONGOING_EVENT a Notification.Builder#setOngoing(true).

Di seguito sono riportati alcuni esempi dell'utilizzo di vari metodi con l'CallStyle notifica.

Kotlin

// Create a new call, setting the user as the caller.
val incomingCaller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as the caller.
Person incomingCaller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Chiamata in arrivo

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

Kotlin

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

Java

// Create a call style notification for an incoming call.
Notification.Builder 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 in stile chiamata per un chiamata in corso.

Kotlin

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

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = new 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 filtrando una chiamata.

Kotlin

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

Java

// Create a call style notification for screening a call.
Notification.Builder builder = new Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Garantisci la 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 ranking più alto nell'API. livello 31 o successivi. Inoltre, CallStyle notifiche sulla versione 30 dell'API o precedenti possono ottenere un ranking simile contrassegnando la notifica come con il metodo setColorized().

Utilizza le API Telecom con le notifiche CallStyle. Per ulteriori informazioni, vedi Panoramica del framework per le telecomunicazioni.