Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 25
Trouver les actions possibles grâce à l’introspection 263
Préférez-vous le menu ?
Un autre moyen d’autoriser l’utilisateur à effectuer des actions sur un contenu, sans savoir
à l’avance quelles sont les actions possibles, consiste à injecter un ensemble de choix dans
le menu de l’application, en appelant addIntentOptions(). Cette méthode prend en
paramètre une intention et remplit un ensemble de choix de l’instance Menu sur laquelle
elle est appelée, chacun de ces choix représentant une action possible. Sélectionner l’un de
ces choix lancera l’activité associée.
Dans l’exemple précédent, le contenu, dont nous ne savions rien, provenait d’une autre
application Android. Ceci dit, nous pouvons aussi savoir parfaitement quel est ce contenu,
lorsque c’est le nôtre. Cependant, les applications Android étant tout à fait capables
d’ajouter de nouvelles actions à des types de contenus existants, les utilisateurs auront
peut-être d’autres possibilités que l’on ne connaît pas encore, même si l’on écrit une application en s’attendant à un certain traitement du contenu.
Revenons, par exemple, au sous-système de marquage évoqué au début de ce chapitre.
Il serait très ennuyeux pour les utilisateurs de devoir faire appel à un outil de marquage
séparé pour choisir un marqueur, puis revenir au contenu sur lequel ils travaillaient afin de
lui associer le marqueur choisi. Ils préféreraient sûrement disposer d’une option dans le
menu "Home" de l’activité leur permettant d’indiquer qu’ils veulent effectuer un
marquage, ce qui les mènerait à une activité de configuration du marqueur, qui saurait déjà
le contenu qui doit être marqué.
Pour ce faire, le sous-système de marquage doit configurer un filtre d’intention supportant
n’importe quel contenu avec sa propre action (ACTION_TAG, par exemple) et avec la catégorie CATEGORY_ALTERNATIVE, ce qui est la convention lorsqu’une application ajoute des
actions au contenu d’une autre.
Pour écrire des activités qui seront prévenues des ajouts possibles, comme le marquage,
faites appel à addIntentOptions() pour ajouter les actions de ces ajouts à votre menu,
comme ici :
Intent intent = new Intent(null, monUri);
intent.addCategory(Intent.ALTERNATIVE_CATEGORY);
menu.addIntentOptions(Menu.ALTERNATIVE, 0,
new ComponentName(this, MonActivite.class),
null, intent, 0, null);
Ici, monUri est une Uri décrivant le contenu qui sera affiché par l’utilisateur dans cette
activité. MonActivite est le nom de la classe de l’activité et menu, le menu à modifier.
Dans notre cas, l’intention que l’on utilise pour choisir les actions exige que les récepteurs
d’intention appropriés reconnaissent la catégorie CATEGORY_ALTERNATIVE. Puis nous
Livre Android.book Page 263 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 25
Trouver les actions possibles grâce à l’introspection 263
Préférez-vous le menu ?
Un autre moyen d’autoriser l’utilisateur à effectuer des actions sur un contenu, sans savoir
à l’avance quelles sont les actions possibles, consiste à injecter un ensemble de choix dans
le menu de l’application, en appelant addIntentOptions(). Cette méthode prend en
paramètre une intention et remplit un ensemble de choix de l’instance Menu sur laquelle
elle est appelée, chacun de ces choix représentant une action possible. Sélectionner l’un de
ces choix lancera l’activité associée.
Dans l’exemple précédent, le contenu, dont nous ne savions rien, provenait d’une autre
application Android. Ceci dit, nous pouvons aussi savoir parfaitement quel est ce contenu,
lorsque c’est le nôtre. Cependant, les applications Android étant tout à fait capables
d’ajouter de nouvelles actions à des types de contenus existants, les utilisateurs auront
peut-être d’autres possibilités que l’on ne connaît pas encore, même si l’on écrit une application en s’attendant à un certain traitement du contenu.
Revenons, par exemple, au sous-système de marquage évoqué au début de ce chapitre.
Il serait très ennuyeux pour les utilisateurs de devoir faire appel à un outil de marquage
séparé pour choisir un marqueur, puis revenir au contenu sur lequel ils travaillaient afin de
lui associer le marqueur choisi. Ils préféreraient sûrement disposer d’une option dans le
menu "Home" de l’activité leur permettant d’indiquer qu’ils veulent effectuer un
marquage, ce qui les mènerait à une activité de configuration du marqueur, qui saurait déjà
le contenu qui doit être marqué.
Pour ce faire, le sous-système de marquage doit configurer un filtre d’intention supportant
n’importe quel contenu avec sa propre action (ACTION_TAG, par exemple) et avec la catégorie CATEGORY_ALTERNATIVE, ce qui est la convention lorsqu’une application ajoute des
actions au contenu d’une autre.
Pour écrire des activités qui seront prévenues des ajouts possibles, comme le marquage,
faites appel à addIntentOptions() pour ajouter les actions de ces ajouts à votre menu,
comme ici :
Intent intent = new Intent(null, monUri);
intent.addCategory(Intent.ALTERNATIVE_CATEGORY);
menu.addIntentOptions(Menu.ALTERNATIVE, 0,
new ComponentName(this, MonActivite.class),
null, intent, 0, null);
Ici, monUri est une Uri décrivant le contenu qui sera affiché par l’utilisateur dans cette
activité. MonActivite est le nom de la classe de l’activité et menu, le menu à modifier.
Dans notre cas, l’intention que l’on utilise pour choisir les actions exige que les récepteurs
d’intention appropriés reconnaissent la catégorie CATEGORY_ALTERNATIVE. Puis nous
Livre Android.book Page 263 Dimanche, 8. novembre 2009 12:23 12
