La tua app potrebbe dover attirare urgentemente l'attenzione dell'utente in determinate situazioni. ad esempio una sveglia in corso o una chiamata in arrivo. Nelle app che hanno come target i dispositivi che eseguono Android 9 (livello API 28) o versioni precedenti, per risolvere il problema puoi avviare un dell'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 tuo
File AndroidManifest.xml
:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Dopodiché, puoi creare un canale di notifica.
Creare un canale di notifica
Crea un canale di notifica per visualizzare correttamente le notifiche e consenti l'utente gestisce le notifiche nelle impostazioni dell'app. Per ulteriori informazioni canali di notifica, consulta Creare e gestire le notifiche canali di YouTube.
Crea i tuoi canali di notifica nel corso del tuo Application
Metodo onCreate
:
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:
Gestisci autorizzazioni alle notifiche
A partire da Android 13, richiedi le autorizzazioni alle notifiche prima del giorno di mostrare le notifiche agli utenti.
L'implementazione minima è simile alla 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, toccando il pulsante Request
permission
viene attivata la finestra di dialogo mostrata nella figura 2:
Se l'utente accetta la richiesta di autorizzazione, viene visualizzata la sezione Informazioni app dell'app. come la figura 3:
.Creare una notifica ad alta priorità
Quando crei la notifica, includi un titolo e un messaggio descrittivi.
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 nel seguente modo:
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ò confermarla o ignorarla l'avviso o il promemoria dell'app. Ad esempio, l'utente può accettare o rifiutare un telefonata in arrivo.
Se la notifica è in corso, ad esempio una telefonata, associare la notifica a un primo piano Google Cloud. 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);