Sobes.tech
Middle

Pourquoi utiliser PendingIntent plutôt qu'un Intent ordinaire?

sobes.tech IA

Réponse de l'IA

PendingIntent permet de transmettre une intention (Intent) à une autre application afin qu'elle puisse l'exécuter en votre nom à un moment ultérieur, même si votre application a été terminée.

Les principales raisons d'utiliser PendingIntent sont :

  • Notifications : Lancer une activité ou un service lors du clic sur une notification, même si l'application n'est pas active à ce moment.
  • Widgets sur le bureau : Lancer une action dans l'application lors de l'interaction avec un widget.
  • Réveil et tâches différées : Exécuter du code de l'application à un moment précis ou selon une condition en utilisant AlarmManager.
  • SMS et autres récepteurs de diffusion : Exécuter une action dans l'application lors de la réception d'une intention de diffusion.

Une Intent normale s'exécute immédiatement et dans le contexte de votre application. PendingIntent, en revanche, est une enveloppe autour de Intent qui donne la permission à une autre application d'exécuter cet Intent avec les mêmes droits que si c'était votre application.

Lors de la création d'un PendingIntent, vous devez choisir le type de composant qui sera lancé : activité (getActivity), service (getService) ou récepteur de diffusion (getBroadcast). Des drapeaux déterminent également le comportement de PendingIntent, par exemple, comment gérer les intentions existantes (FLAG_UPDATE_CURRENT, FLAG_CANCEL_CURRENT).

Exemple de création de PendingIntent pour lancer une activité :

// Créer une intention pour lancer MainActivity
Intent intent = new Intent(context, MainActivity.class);
// Emballer l'intention dans un PendingIntent
// requestCode est utilisé pour identifier le pending intent
// FLAG_UPDATE_CURRENT : si un pending intent avec ces données existe déjà, le mettre à jour
PendingIntent pendingIntent = PendingIntent.getActivity(
    context,
    0,
    intent,
    PendingIntent.FLAG_UPDATE_CURRENT
);