PendingIntent

 

Il s'agit d'une classe permettant de demander à une autre activité de lancer une intention au nom de l'activité courante (en fait, avec les mêmes permissions et identité que l'activité courante) mais pas dans l'immédiat.

Typiquement utilisé en réponse à un évènement à venir (par exemple, le bon déroulement pour l'envoi d'un SMS, un click sur un widget).

Il existe des méthodes statiques afin de pouvoir gérer une intention sur activité, un service ou un broadcast:

Intention sur activité:

static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)

ou static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags, Bundle options) pour passer un Bundle à cette nouvelle activité.

Ces deux méthodes permettent de récupérer une instance PendingIntent. Similaire à Context.StartActivity().

Image non trouvée !Il sera possible de lancer plusieurs intentions:

static PendingIntent getActivities(Context context, int requestCode, Intent[] intents, int flags)

ou static PendingIntent getActivities(Context context, int requestCode, Intent[] intents, int flags, Bundle options)

 

Intention sur un service:

static PendingIntent getService(Context context, int requestCode, Intent intent, int flags)

Pour récupérer une instance PendingIntent qui démarrera un service. Similaire à Context.startService().

 

Intention sur un broadcast:

static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)

Pour récupérer une instance PendingIntent qui lancera un broadcast. Similaire à Context.sendBroadcast().

 

Paramètres des méthodes précédentes

Les paramètres sont :

context: Le contexte, this par exemple pour une activité.

requestCode: Non utilisé pour le moment

intent: Une instance d'intention que vous voulez lancer via le PendingIntent.

flags: les valeurs suivantes sont définies dans la classe PendingIntent:

FLAG_ONE_SHOT L'instance ne pourra être lancée q'une fois

FLAG_NO_CREATE S'il n'existe pas déjà un PendingIntent identique, alors retourne null.

FLAG_CANCEL_CURRENT Flag indiquant que s'il existe déjà une instance de PendingIntent identique, celle-ci doit être supprimée avant de créer la nouvelle (permet de changer les extras datas par exemple).

FLAG_UPDATE_CURRENT Pour modifier l'instance déjà existante (les extras data). Attention, les entités qui ont déjà étaient lancées par votre PendingIntent peuvent accéder à ces modifications, même si elles ont été lancées avant cette modification.

options: un bundle.

 

D'autres méthodes

cancel() permet d'abandonnée le PendingIntent courant (seule l'application qui a créée cette instance pourra déclencher cette méthode).

void send() Exécute l'opération demandée dans l'instance PendingIntent.

 

Exemple de code

Cf. exemple avec les SMS.