Dans certaines situations, votre application peut avoir besoin d'attirer l'attention de l'utilisateur de manière urgente, par exemple en cas d'alarme en cours ou d'appel entrant. Sur les appareils équipés d'Android 9 (niveau d'API 28) ou version antérieure, vous pouvez gérer cela en lançant une activité lorsque l'application est en arrière-plan. Ce document explique comment obtenir ce comportement sur les appareils exécutant Android 10 (niveau d'API 29) ou version ultérieure.
Ajouter l'autorisation POST_NOTIFICATIONS
À partir d'Android 13 (niveau d'API 33), déclarez l'autorisation POST_NOTIFICATIONS dans votre fichier AndroidManifest.xml :
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Après avoir déclaré l'autorisation, créez un canal de notification.
Créer un canal de notification
Créez un canal de notification pour afficher les notifications et permettre aux utilisateurs de gérer les catégories de notifications dans les paramètres système. Pour en savoir plus sur les canaux de notification, consultez Créer et gérer des canaux de notification.
Créez vos canaux de notification dans la méthode onCreate de votre 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) } }
Lorsque l'utilisateur exécute l'application pour la première fois, le système affiche le canal sur l'écran Infos sur l'appli, comme illustré dans la figure 1 :
Gérer les autorisations de notification
À partir d'Android 13, demandez les autorisations de notification avant d'afficher des notifications aux utilisateurs.
L'exemple de code suivant montre comment demander l'autorisation de notification d'exécution dans 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") }
Sur les appareils équipés d'Android 13 ou version ultérieure, appuyer sur le bouton Demander l'autorisation affiche la boîte de dialogue système illustrée dans la figure 2 :
Lorsque l'utilisateur accorde l'autorisation, le système met à jour l'écran Infos sur l'appli, comme illustré dans la figure 3 :
Créer une notification à priorité élevée
Lorsque vous créez une notification à priorité élevée, fournissez un titre et un message clairs. Attribuez également un canal et un niveau de priorité élevés.
L'exemple de code suivant configure et crée une notification à haute 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()) }
Afficher la notification à l'utilisateur
L'appel de la fonction showNotification déclenche la notification comme suit :
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
La figure 4 montre la notification à priorité élevée affichée par le système :
Notification en cours
Lorsque vous affichez votre notification à l'utilisateur, il peut accuser réception de l'alerte ou du rappel de votre application, ou les ignorer. Par exemple, l'utilisateur peut accepter ou refuser un appel téléphonique entrant.
Si votre notification représente une tâche en arrière-plan en cours, comme un appel téléphonique actif, associez-la à un service de premier plan. L'extrait de code suivant montre comment afficher une notification associée à un service de premier plan :
// Provide a unique integer for the "notificationId" of each notification. startForeground(notificationId, notification)
Envisagez d'utiliser les infos en direct
Les notifications urgentes en cours peuvent bénéficier d'une visibilité accrue. Envisagez de promouvoir les notifications en cours en tant que Mises à jour en temps réel pour afficher des informations sur l'état sur les surfaces de l'UI système.