Mostra notifiche urgenti

In determinate situazioni, ad esempio nel caso di un avviso continuo o di una chiamata in arrivo, l'app potrebbe dover attirare urgentemente l'attenzione dell'utente. Sui dispositivi con Android 9 (livello API 28) o versioni precedenti, puoi gestire questo aspetto avviando un'attività mentre l'app è in background. Questo documento mostra come ottenere questo comportamento sui dispositivi con Android 10 (livello API 29) e versioni successive.

Aggiungi l'autorizzazione POST_NOTIFICATIONS

A partire da Android 13 (livello API 33), dichiara l'autorizzazione POST_NOTIFICATIONS nel file AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

Dopo aver dichiarato l'autorizzazione, crea un canale di notifica.

Creazione di un canale di notifica

Crea un canale di notifica per visualizzare le notifiche e consentire agli utenti di gestire le categorie di notifiche nelle impostazioni di sistema. Per saperne di più sui canali di notifica, consulta Crea e gestisci i canali di notifica.

Crea i canali di notifica nel metodo onCreate della classe Application:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

Quando l'utente esegue l'app per la prima volta, il sistema visualizza il canale nella schermata Informazioni app, come mostrato nella Figura 1:

La schermata di notifica Informazioni app che mostra il canale creato.
Figura 1. Sezione Notifiche nella schermata Informazioni app delle impostazioni di sistema dell'app.

Gestisci le autorizzazioni alle notifiche

A partire da Android 13, richiedi le autorizzazioni alle notifiche prima di mostrare le notifiche agli utenti.

Il seguente esempio di codice mostra come richiedere l'autorizzazione di notifica in fase di runtime in Jetpack Compose:

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
// ...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

Sui dispositivi con Android 13 e versioni successive, toccando il pulsante Richiedi autorizzazione viene visualizzata la finestra di dialogo di sistema mostrata nella figura 2:

La finestra di dialogo di sistema che chiede all'utente di consentire le notifiche.
Figura 2. Finestra di dialogo di sistema per la richiesta di autorizzazione alle notifiche.

Quando l'utente concede l'autorizzazione, il sistema aggiorna la schermata Informazioni app, come mostrato nella Figura 3:

La schermata Informazioni app che mostra le autorizzazioni alle notifiche concesse.
Figura 3. Autorizzazioni alle notifiche concesse.

Crea una notifica ad altra priorità

Quando crei una notifica ad alta priorità, fornisci un titolo e un messaggio chiari. Assegna anche un canale di importanza elevata e un livello di priorità.

Il seguente esempio di codice configura e crea una notifica ad alta priorità:

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

    notificationManager.notify(0, notificationBuilder.build())
}

Mostra la notifica all'utente

La chiamata alla funzione showNotification attiva la notifica come segue:

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

La figura 4 mostra la notifica ad alta priorità visualizzata dal sistema:

Una notifica ad alta priorità visualizzata sul dispositivo.
Figura 4. Una notifica ad alta priorità.

Notifica continua

Quando mostri la notifica all'utente, può confermare o ignorare l'avviso o il promemoria dell'app. Ad esempio, l'utente può accettare o rifiutare una chiamata in arrivo.

Se la notifica rappresenta un'attività in background continua, come una chiamata attiva, associa la notifica a un servizio in primo piano. Il seguente snippet di codice mostra come visualizzare una notifica associata a un servizio in primo piano:

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

Valuta la possibilità di utilizzare gli aggiornamenti in tempo reale

Le notifiche in corso urgenti possono trarre vantaggio da una maggiore visibilità. Valuta la possibilità di promuovere le notifiche in corso come Aggiornamenti in tempo reale per visualizzare le informazioni sullo stato nelle varie superfici della UI di sistema.