Sobes.tech
Middle

Qu'est-ce que PendingIntent ?

sobes.tech IA

Réponse de l'IA

PendingIntent est un jeton qui permet à une autre application d’exécuter une partie du code au nom de votre application avec vos autorisations.

Il est utilisé pour :

  • Notifications (lancer une activité lors du clic sur la notification).
  • Widgets de bureau (traitement des clics de l’utilisateur).
  • Services de planification (tâches récurrentes avec AlarmManager).

Principales différences avec un Intent normal :

  • PendingIntent est transmis à une autre application.
  • PendingIntent conserve les autorisations de l’application d’origine.

Types de PendingIntent :

  • getActivity(): pour lancer une Activity.
    // Création d’un PendingIntent pour lancer une Activity
    val intent = Intent(context, TargetActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    
  • getService(): pour lancer un Service.
    // Création d’un PendingIntent pour lancer un Service
    val intent = Intent(context, MyService::class.java)
    val pendingIntent = PendingIntent.getService(context, 0, intent, 0)
    
  • getBroadcast(): pour envoyer un message broadcast.
    // Création d’un PendingIntent pour envoyer un Broadcast
    val intent = Intent("MY_ACTION")
    val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
    

Les drapeaux de PendingIntent influencent leur comportement :

Drapeau Description
FLAG_ONE_SHOT Le PendingIntent ne peut être utilisé qu’une seule fois.
FLAG_NO_CREATE Si le PendingIntent n’existe pas, ne pas le créer, retourner null.
FLAG_CANCEL_CURRENT Si un PendingIntent avec le même Intent existe, l’annuler et en créer un nouveau.
FLAG_UPDATE_CURRENT Si un PendingIntent avec le même Intent existe, mettre à jour ses Extras.
FLAG_IMMUTABLE Le PendingIntent ne peut pas être modifié par d’autres applications (recommandé).

Lors de l’utilisation de PendingIntent, il est important de spécifier des codes de requête uniques (le deuxième argument dans les méthodes getActivity, getService, getBroadcast) pour les différencier.