Mostra notifiche urgenti

La tua app potrebbe dover attirare immediatamente l'attenzione dell'utente in determinate situazioni, ad esempio una sveglia in corso o una chiamata in arrivo. Nelle app che hanno come target dispositivi con Android 9 (livello API 28) o versioni precedenti, puoi gestire questa situazione avviando un'attività mentre l'app è in background. Questo documento mostra come ottenere questo comportamento sui dispositivi che eseguono Android 10 (livello API 29) e Android 13 (livello API 33).

Aggiungi l'autorizzazione POST_NOTIFICATIONS

A partire da Android 13, aggiungi la seguente riga al tuo file AndroidManifest.xml:

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

Una volta ottenuto, puoi creare un canale di notifica.

Crea un canale di notifica

Crea un canale di notifica per visualizzare correttamente le notifiche e consentire all'utente di gestirle nelle impostazioni dell'app. Per ulteriori informazioni sui canali di notifica, consulta l'articolo Creare e gestire canali di notifica.

Crea i canali di notifica nel metodo onCreate del tuo corso Application:

Kotlin

class DACapp : 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, vede qualcosa come la figura 1 nella schermata di sistema Informazioni app dell'app:

Un&#39;immagine che mostra la schermata Informazioni app e Notifiche dell&#39;app.
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.

L'implementazione minima è la seguente:

Kotlin

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")
}

Se sul tuo dispositivo è installato Android 13, quando tocchi il pulsante Request permission viene attivata la finestra di dialogo mostrata nella figura 2:

Un&#39;immagine che mostra la finestra di dialogo della richiesta di autorizzazione
Figura 2. Finestra di dialogo di sistema per la richiesta di autorizzazione alle notifiche.

Se l'utente accetta la richiesta di autorizzazione, la sezione Informazioni app dell'app sarà simile alla figura 3:

Un&#39;immagine che mostra la schermata delle informazioni sull&#39;app dopo aver concesso la richiesta di autorizzazione alle notifiche
Figura 3. Autorizzazioni alle notifiche concesse.

Crea una notifica ad alta priorità

Quando crei la notifica, includi un titolo descrittivo e un messaggio.

L'esempio seguente contiene una notifica:

Kotlin

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(666, notificationBuilder.build())
}

Mostra la notifica all'utente

La chiamata della funzione showNotification() attiva la notifica come segue:

Kotlin

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

La notifica in questo esempio è la figura 4:

Un&#39;immagine che mostra una notifica ad alta priorità
Figura 4. Una notifica con priorità elevata.

Notifica in corso

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

Se la notifica è in corso, ad esempio una telefonata in arrivo, associala a un servizio in primo piano. Il seguente snippet di codice mostra come visualizzare una notifica associata a un servizio in primo piano:

Kotlin

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

Java

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