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é.
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