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:
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:
Quando l'utente concede l'autorizzazione, il sistema aggiorna la schermata Informazioni app, come mostrato nella Figura 3:
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:
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.