Différentes solutions pour lancer exécuter une activité

 

Lancer une activité sans attendre d'informations en retour

Une fois l'instance d'intention récupérée, il reste à savoir comment lancer l'activité qui répondra à notre intention.

Nous en avons déjà vu une: startActivity(Intent intent) qui permet de lancer une activité et c'est fini pour nous.

 

Lancer une activité avec récupération d'informations en retour

Cependant, nous aurons aussi besoin de lancer des activités et récupérer le résultat de ces activités !

Le cas se présentera par exemple avec des intentions implicites utilisant l'action ACTION_PICK, qui permet de récupérer des informations d'une activité.

Nous utiliserons cette fois la méthode startActivityForResult(Intent intent, int requestCode)

L'activité qui recevra le résultat (donc celle qui a fait le startActivityForResult) devant recevoir un résultat, devra implémenter la méthode suivante:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

}

 

Pour les deux méthodes, startActivity(Intent intent) ou startActivityForResult(Intent intent, int requestCode), des paramètres sont nécessaires:

intent n'est plus à présenter, c'est l'instance de l'intention.

requestCode est une valeur que l'on passe à une activité. Cette valeur sera retournée par cette activité permettant ainsi de savoir qui retourne le résultat et donc d'effectuer les traitements en conséquence. Similaire à un identifiant.

resultCode est le code retour de l'activité appelé: RESULT_CANCELED, RESULT_OK ou RESULT_FIRST_USER.

 

Récupération de résultat de l'activité appelée

Généralement, nous voulons récupérer un résultat:

Ce résultat pourra être stocké dans l'intention au niveau de data, ou extra data.

Pour récupérer cette information, nous utiliserons la méthode String monString= intent.getStringExtra(clefDonnée);

De même, pour un entier intent.getIntExtra(clef), un long intent.getLongExtra (clef)

Où clef est de type String est représente la clef pour accéder à une valeur.

Le résultat pourra aussi être stocké dans data. Cette fois, il faudra utiliser la méthode getData().

Tout le problème est alors de savoir ce que retourne l'activité appelée !

Plus de détails seront données dans le chapitre Envoyer/récupérer des données entre deux activités d'un intention.

 

Exemple de code

Le but étant de faire simple, nous allons lancer la gallerie d'images et en retour afficher l'image sélectionnée:

La gallery retourne dans data (getData()) une uri représentant le nom du fichier image sélectionné.