In determinate situazioni, la tua app potrebbe dover attirare urgentemente l'attenzione dell'utente, ad esempio in caso di sveglia attiva o chiamata in arrivo. Nelle app che hanno come target i dispositivi con Android 9 (livello API 28) o versioni precedenti, puoi gestire questo problema 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 fino ad Android 13 (livello API 33).
Aggiungi l'autorizzazione POST_NOTIFICATIONS
A partire da Android 13, aggiungi la seguente riga al
AndroidManifest.xml
file:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Una volta ottenuto questo, puoi creare un canale di notifica.
Creare 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 saperne di più sui canali di notifica, consulta Creare e gestire i canali di notifica.
Crea i tuoi canali di notifica nel metodo onCreate
della classe 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 la tua app per la prima volta, visualizza una schermata di sistema Informazioni app simile alla figura 1:
Gestire le autorizzazioni per le notifiche
A partire da Android 13, richiedi le autorizzazioni di notifica 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 il tuo dispositivo è dotato di Android 13, toccando il pulsante Request
permission
viene attivata la finestra di dialogo mostrata nella figura 2:
Se l'utente accetta la richiesta di autorizzazione, la sezione Informazioni sull'app dell'app sarà simile alla figura 3:
Creare una notifica con priorità elevata
Quando crei la notifica, includi un titolo e un messaggio descrittivi.
Il seguente esempio 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()) }
Mostrare la notifica all'utente
La chiamata alla funzione showNotification()
attiva la notifica come segue:
Kotlin
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
La notifica in questo esempio è simile alla figura 4:
Notifica continua
Quando mostri la notifica all'utente, quest'ultimo può confermare o ignorare l'avviso o il promemoria della tua app. Ad esempio, l'utente può accettare o rifiutare una chiamata in arrivo.
Se la notifica è in corso, ad esempio una chiamata in arrivo, associata 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:
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);