Votre application peut avoir besoin d'attirer l'attention de l'utilisateur en urgence dans certaines situations, par exemple lorsqu'une alarme en cours ou un appel entrant est en cours. Dans les applications ciblant les appareils équipés d'Android 9 (niveau d'API 28) ou version antérieure, vous pouvez gérer ce problème en lançant une activité lorsque l'application est exécutée en arrière-plan. Ce document explique comment obtenir ce comportement sur les appareils équipés d'Android 10 (niveau d'API 29) à Android 13 (niveau d'API 33).
Ajouter l'autorisation POST_NOTIFICATIONS
À partir d'Android 13, ajoutez la ligne suivante à votre fichier AndroidManifest.xml
:
<manifest ...> <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <application ...> ... </application> </manifest>
Ensuite, vous pouvez créer un canal de notification.
Créer un canal de notification
Créez un canal de notification pour afficher correctement vos notifications et permettre à l'utilisateur de les gérer dans les paramètres de l'application. 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 la 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) } }
Lorsque l'utilisateur exécute votre application pour la première fois, il voit s'afficher la figure 1 sur l'écran système Informations sur l'application de votre application:
Gérer les autorisations de notification
À partir d'Android 13, demandez des autorisations de notification avant d'afficher les notifications aux utilisateurs.
L'implémentation minimale se présente comme suit:
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") }
Si votre appareil est équipé d'Android 13, appuyez sur le bouton Request
permission
pour afficher la boîte de dialogue illustrée dans la figure 2:
Si l'utilisateur accepte la demande d'autorisation, la section App info (Informations sur l'application) de l'application ressemble à la figure 3:
Créer une notification à priorité élevée
Lorsque vous créez la notification, incluez un titre et un message descriptifs.
L'exemple suivant contient une notification:
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()) }
Afficher la notification pour l'utilisateur
L'appel de la fonction showNotification()
déclenche la notification comme suit:
Kotlin
Button(onClick = { showNotification() }) { Text(text = "Show notification") }
Dans cet exemple, la notification ressemble à la figure 4:
Notification en cours
Lorsque vous affichez votre notification à l'utilisateur, celui-ci peut accuser réception ou ignorer l'alerte ou le rappel de votre application. Par exemple, l'utilisateur peut accepter ou refuser un appel téléphonique entrant.
S'il s'agit d'une notification en cours, telle qu'un appel téléphonique entrant, associez-la à un service de premier plan. L'extrait de code suivant montre comment afficher une notification associée à un service de premier plan:
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);