Afficher les notifications urgentes

Dans certains cas, 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 ce problème en lançant une activité lorsque l'application est en arrière-plan. Ce document explique comment obtenir ce comportement sur les appareils équipés d'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'application, comme illustré dans la figure 1 :

Écran de notification &quot;Infos sur l'appli&quot; affichant le canal créé.
Figure 1 : Section "Notifications" de l'écran Infos sur l'appli des paramètres système de l'application.

Gérer les autorisations de notifications

À partir d'Android 13, demandez l'autorisation d'envoyer des notifications avant d'en afficher aux utilisateurs.

L'exemple de code suivant montre comment demander l'autorisation d'envoyer des notifications 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 Request permission (Demander l'autorisation) affiche la boîte de dialogue système illustrée à la figure 2 :

Boîte de dialogue système invitant l'utilisateur à autoriser les notifications.
Figure 2 : Boîte de dialogue système pour la demande d'autorisation de notification.

Lorsque l'utilisateur accorde l'autorisation, le système met à jour l'écran Infos sur l'appli, comme illustré dans la figure 3 :

Écran &quot;Infos sur l'appli&quot; affichant les autorisations de notification accordées.
Figure 3 : Autorisations de notification accordées.

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 de haute importance et un niveau de priorité.

L'exemple de code suivant configure et crée une notification de priorité élevée :

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 à priorité élevée affichée sur l'appareil.
Figure 4 : Notification à priorité élevée.

Notification en cours

Lorsque vous affichez votre notification à l'utilisateur, il peut accepter ou ignorer l'alerte ou le rappel de votre application. 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 en cours urgentes peuvent bénéficier d'une visibilité accrue. Envisagez de promouvoir les notifications d'activité en cours en tant qu'infos en direct pour afficher des informations d'état sur les surfaces de l'UI du système.