Sobes.tech
Middle

Qu'est-ce que PendingIntent?

sobes.tech IA

Réponse de l'IA

Ceci est une enveloppe autour de Intent, qui délègue l'autorité à une autre application pour exécuter ce Intent en notre nom à l'avenir.

Caractéristiques clés:

  • Exécution différée: Intent n'est pas exécuté immédiatement, mais plus tard, par un autre composant.
  • Permissions: Le composant auquel le PendingIntent est transmis obtient les mêmes permissions que notre application pour exécuter ce Intent.
  • Unicité: Différents PendingIntent sont considérés comme identiques si le type de composant, l'action (action), les données (data), les catégories (categories) et les drapeaux (flags) correspondent.
  • Utilisation: Souvent utilisé pour les notifications, les tâches en arrière-plan, les widgets et AlarmManager.

Les types de PendingIntent correspondent aux types de composants cibles:

  • getActivity(Context context, int requestCode, Intent intent, int flags): lance une Activity.
  • getBroadcast(Context context, int requestCode, Intent intent, int flags): envoie un signal de diffusion.
  • getService(Context context, int requestCode, Intent intent, int flags): lance ou se connecte à un Service.
  • getForegroundService(Context context, int requestCode, Intent intent, int flags): lance un Foreground Service.
// Exemple de création de PendingIntent pour Notifications
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0, // requestCode, utilisé pour distinguer le PendingIntent
    notificationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE // Flags pour gérer le comportement
);
// Maintenant, ce pendingIntent peut être transmis, par exemple, à une Notification

Les flags (flags) influencent le comportement lors de la création ou de la mise à jour d'un PendingIntent existant:

  • FLAG_ONE_SHOT: PendingIntent ne peut être utilisé qu'une seule fois.
  • FLAG_NO_CREATE: Si le PendingIntent n'existe pas, il n'est pas créé, retourne null.
  • FLAG_CANCEL_CURRENT: Si un PendingIntent avec les mêmes paramètres existe déjà, il est annulé, et un nouveau est créé.
  • FLAG_UPDATE_CURRENT: Si un PendingIntent avec les mêmes paramètres existe déjà, ses données supplémentaires (données extras) sont mises à jour.
  • FLAG_IMMUTABLE (obligatoire à partir de S/API 31 dans la plupart des cas): Crée un PendingIntent immuable.
  • FLAG_MUTABLE: Crée un PendingIntent mutable (à utiliser avec précaution, peut être vulnérable).

Le choix de la bonne bannière est crucial pour le bon fonctionnement et la sécurité.