Création d'une activité répondant à une intention implicite

 

Maintenant que nous savons créer un mime pour nos activités, il serait bien que ces activités sachent pourquoi elles sont lancées !

Enfin, rien de très compliqué (cela change). Car l'activité lancée connait l'instance de l'intention qui à permis ce lancement.

 

Récupération des informations de l'intention

Il suffit de le demander via la méthode getIntent() qui retourne cette instance.

Comme toutes les informations sont passées dans cette instance intention (via les setters), alors l'activité pourra en déduire ce qui lui est demandée de faire (via les getters équivalent). Plus de détails dans le chapitre Envoyer/récupérer des données entre deux activités d'un intention.

C'est tellement simple que je me contenterais de mettre un exemple de code basé sur l'exemple de MIME vu précédemment !

Dans cette exemple, lecture de l'instance de l'intention ayant provoquée l'appel à l'activité et affichage des informations sous forme de toast.

 

Retourner un résultat

Nous avons vu que lors d'un appel implicite, l'activité appelante pouvait récupérer des informations (en utilisant la méthode startActivityForResult) de l'activité appelée.

L'activité appelante devra dans ce cas retourner ces informations !

Ces informations sont:

- Code retour de l'activité appelée dont les deux principaux sont:

  • RESULT_OK: L'activité c'est bien déroulée (signé = -1 ou tous les bits sont positionnés 0xffffffff).
  • RESULT_CANCELED: Abandon de l'activité (0).

Rien ne vous empêchant de retourner d'autres valeurs (différentes de celles indiqués ci-dessus si possible !) que l'activité appelante devra être en mesure d'interpréter.

Pour retourner cette valeur, il faudra (obligation !) utiliser la méthode setResult(int code_retour, Intent intent); ou setResult(int resultCode);

 

Terminer l'activité appelé

Il reste maintenant à mettre fin à notre activité appelée pour retourner à notre activité appelante.

Il suffit d'utiliser la méthode finish(); d'une activité.

Image non trouvée !Cette phase est importante, car c'est elle qui permettra de déclencher la méthode protected void onActivityResult(int requestCode, int resultCode, Intent intent) de l'activité appelante qui pourra alors lire les informations retournées par l'activité appelée.

 

Exemple de code

Avoir une activité qui affiche des fichiers .txt et une activité qui demande l'affichage d'un .txt

On reprend le fichier manifest pour définir les mimes et les filtres que l'on complétera pour nos activités:

Le but n'étant pas ici d'afficher un fichier texte (c'est secondaire), mais d'avoir un squelette d'une activité pouvant répondre à nos besoins. Rendant ainsi le code plus lisible !

Enfin, L'activité principale (bon, là je ne peux pas faire simple) qui va demander une activité permettant d'afficher un .txt et une activité permettant d'afficher un .c.

Pour le fichier .txt, notre activité devrait être proposée avec d'autres pour permettre l'affichage de celui-ci.

Pour le .c, notre activité filtrant l'extension du fichier, elle ne doit pas être proposée !

Cf. Activité, Listener bouton, les intentions implicites, la gestion des erreurs sur les intentions.

Enfin, les layouts

Pour l'activité principale nommé activity_main.xml:

et celui de l'afficheur de text, nommé activity_aff_text.xml