Module: Développement Android
Chapitre 3: Intents
Dr. Nizar Sghaier
[Link]@[Link]
1
Rappels
• Quels sont les caractéristiques d'Android?
• Quelles sont les différentes couches de la plateforme
Android?
• Quel est le rôle de la machine Dalvik?
• Quelle est la signification de AVD et quel est son rôle?
• Quelles sont les étapes de production d'une application
Android?
• Quelle est l'extension du fichier d'installation d'une
2
application Android?
• Citer les principaux répertoires d'un projet Android. 3
INTERACTION ENTRE ACTIVITÉS
▸ Une application Android peut contenir plusieurs activités :
▸ Chaque activité utilise la méthode setContentView pour s’associer avec une
interface graphique.
▸ Les activités sont indépendantes les unes des autres, cependant, elles peuvent
collaborer pour échanger des données et des actions.
▸ Typiquement, l’une des activités est désignée comme étant la première à être
présentée à l’utilisateur quand l’application est lancée : on l’appelle l’activité de
démarrage
▸ Les activités interagissent en mode asynchrone.
3
▸ Le passage d’une activité à une autre est réalisé en demandant à l’activité en cours
d’exécuter un Intent.
INTERACTION ENTRE ACTIVITÉS
4
INTERACTION ENTRE ACTIVITÉS
5
INTERACTION ENTRE ACTIVITÉS
▸ Un intent est un message qui peut être utilisé pour demander une
action à partir d’un autre composant de l’application.
▸ Permet invoquer des Activités, des Broadcast Receivers ou des Services.
Les différentes méthodes utilisées pour appeler ces composantes sont :
▸ startActivity(intent) : lance une activité
▸ sendBroadcast(intent) : envoie un intent à tous les composants
Broadcast Receivers intéressés
▸ s t a r t S erv i ce (in t en t ) ou bindService(intent, …) : communiquent avec
un service en arrière plan.
6
INTERACTION ENTRE ACTIVITÉS
▸ Un intent comporte des informations qu’Android utilise
▸ Nom du composant (activité) à démarrer
▸ Action à réaliser : ACTION_VIEW, ACTION_SEND…
▸ Data : URI référençant la donnée sur laquelle l’action va agir
▸ Catégorie : Information sur le type de composants qui va gérer l’intent
(CATEGORY-BROWSABLE, CATEGORY-LAUNCHER…)
▸ Extras : Paires clef-valeur qui comportent des informations additionnelles
pour réaliser l’action demandée
▸ Drapeaux (Flags) : Définissent la classe qui fonctionne comme
métadonnée pour cet intent
7
INTERACTION ENTRE ACTIVITÉS
Il existe deux types d’intents :
▸ Intents Explicites
▸ Spécifient le composant à démarrer par nom (nom complet de la classe).
▸ Permettent de démarrer un composant de votre propre application, car
le nom de la classe est connu
▸ Intents Implicites
▸ Ne nomment pas un composant spécifique, mais déclarent une action à
réaliser.
▸ Permet à un composant d’une application d’appeler un composant d’une
8
autre application.
INTENTS EXPLICITE
• Démarrer un intent explicite :
• Le lancement d'une nouvelle Activity de façon explicite s'effectue en
deux lignes.
1. Intent i = new Intent([Link],[Link]).
• Activité courante Activité appelée
2. StartActivity(i)
9
INTENTS EXPLICITE
Les principaux arguments d’un Intent explicite sont :
▸ Le contexte déclenchant l’intent, soit :
▸ This, si on le lance à partir de l’activité de départ,
▸ <Activity_class_name>. this, sinon
▸ La classe destination : <Activity_class_name>.class
▸ Il est donc appelé comme suit:
▸ I n t e n t my Activity Intent = n ew I n t e n t ([Link], [Link]) ;
▸ startA ctiv ity ( my A ctiv ity I n ten t) ;
1
0
INTENTS EXPLICITE
▸ L'activité démarrée reste à l'écran jusqu'à ce que l'utilisateur appuie sur
le bouton Précédent (Back) de l'appareil.
▸ Cette activité est alors fermée (détruite) et reprise par le système.
L'activité d'origine revient au premier plan.
▸ Vous pouvez également fermer manuellement l'activité démarrée en
réponse à une action de l'utilisateur (comme un clic sur un bouton, par
exemple) avec la méthode finish().
1
1
LES EXTRATS
▸ Un extra est un couple clé/valeur, basé sur le système Bundle :
▸ La clé est l'identifiant, on peut y mettre ce qu’on veut sous la forme
d’une chaîne de caractères.
▸ La valeur est celle de la donnée. Elle sera associée à la clé.
▸ Ainsi, quand on crée un extra, on lui donne une clé et une valeur. En
revanche, à la récupération de notre extra, c’est à travers la clé qu’on
obtiendra la valeur associée.
1
2
LES EXTRATS
Intent i = new Intent(this, [Link]);
[Link]("zoneTexte", chaine); // string
[Link]("nbreDeMots", mots); // integer
startActivity(i);
Intent i = new Intent(this, [Link]);
Bundle b = new Bundle();, chaine);
[Link]("zoneTexte"
[Link]( "nbreDeMots", mots);
[Link](b);
1
3 startActivity(i);
LES EXTRATS
Intent i = getIntent();
if ([Link]("zoneTexte")){
String str = [Link]("zoneTexte");
}
int nbMots = [Link]("nbreDeMots", 0);
Intent i = getIntent();
Bundle w = [Link]();
String str = [Link]("zoneTexte");
int nb = [Link]("nbreDeMots");
1
4
LES DATAS
▸ L’envoie des données se fait à travers la méthode s e t Da t a () de la classe
Intent.
▸ SetData() prend comme arguments un objet URI, qui représente
l’emplacement de la donnée qu’on compte passer à l’intent.
▸ Un URI (Unified Resource Identifier) peut être un Url ([Link] un
numéro de téléphone ([Link] un emplacement géographique (geo://).
etc.
1
5
LES DATAS
Intent i = new Intent(this, [Link]);
// adresse URL
[Link]([Link]("[Link]
// un fichier
[Link]([Link](new File("/sdcard/[Link]")));
// un contenu data
[Link]([Link]("content://[Link]/data"));
// type personnalisé
[Link]([Link]("custom:" + dataID + buttonId));
1
6
La méthode statique [Link] permet de construire un objet URI à
partir d'une chaîne de caractères.
LES DATAS & EXTRAS
En résumé donc :
‣ dans la première activité (d'envoi), il faut :
▸ Créer l'objet d’Intent.
▸ Mettre des données ou des extras dans cet Intent.
▸ Commencer la nouvelle activité avec startActivity().
▸ Dans la deuxième activité (réception), il faut :
▸ Obtenir l'objet d’Intent avec lequel l'activité a été démarrée.
▸ Récupérer les données ou les extras de l'objet Intent.
1
7
LES DATAS Vs EXTRATS
On opte pour les intent Data quand :
▸ Nous n’allons envoyer qu’une seule information à l’activité cible.
▸ L’information envoyée peut être représenté par un URI
On opte pour les intent Extras quand :
▸ On désire envoyer plusieurs informations (de différents types en
général) à l’activité cible.
▸ Une de ces informations ne peut pas être envoyé à travers un URI.
1
8
LES DATAS Vs EXTARTS
▸ Les datas des Intents et les extras ne sont pas exclusifs.
▸ Il est possible ainsi d’utiliser des données pour un URI et des extras
pour toute information supplémentaire dont l'activité démarrée a
besoin pour traiter les données dans cet URI.
1
9
ACTIVITY FOR RESULT
▸ Pour récupérer un résultat à partir d’une autre activité, il est possible
d’établir un intent « bidirectionnel » entre deux activités.
▸ Pour ça, il faut invoquer startActivityForResult (deprecated depuis
Android) 11au lieu de StartActivity
▸ Evidemment, l’activité cible doit renvoyer un résultat une fois l’opération
réalisée.
▸ Le résultat est envoyé sous forme d’Intent.
▸ L’activité principale le recevra dans la méthode onActivityResult().
2
0
ACTIVITY FOR RESULT
• ▸ De nouvelles classes ont été créées afin de donner plus de
fonctionnalités aux activités. Ces nouvelles classes doivent être
utilisées pour remplacer l'appel de la méthode "onActivityResult".
• ▸ On doit d'abord appeler la méthode "registerForActivityResult"
qui va enregistrer le résultat en paramètres.
•▸ Cette méthode prend 2 paramètres :
• ▸ Le premier est un objet de la classe "ActivityResultContracts",
qui définit le type de données dont a besoin l'activité pour
produire le résultat et celui attendu dans le résultat de l'activité.
•▸ Le deuxième est la méthode qui sera appelée une fois l'activité
2
1
terminée.
INTENT IMPLICITE
▸ Démarrer un intent implicite :
▸ Exemple :
▸ String r eq u et e = "[Link]
▸ I n t e n t i = n e w I ntent( ) ;
▸ [Link](Intent.ACTION_VIEW); [Link]([Link](requête))
▸ startActivity(i);
Ne définit pas une application en particulier, ACTION_VIEW : action définie par le
2
Android va tenter de chercher une framework qui consiste à démarrer un
2
application s'étant définie comme capable de navigateur web sur l'Uri donnée
répondre à l'action ACTION_VIEW
INTENT IMPLICITE
▸ Les principaux arguments d’un Intent implicite sont :
▸ Action : l’action à réaliser, peut être prédéfinie (ACTION_VIEW,
ACTION_EDIT, ACTION_MAIN, etc.) ou créée par l’utilisateur.
▸ Données : Les données principales sur lesquelles on va agir, tel
qu’un url ou un numéro de téléphone à appeler.
▸ Il est donc typiquement appelé comme suit:
I n t e n t myActivityIntent = new I n t e n t (<action>, <données>) ;
2 startActivity (myActivityIntent) ;
3
INTENT IMPLICITE
▸ Un intent implicite se comporte comme suit:
▸ Activité A crée un Intent avec une action et le passe en paramètre à
startActivity
▸ Le système Android cherchent toutes les applications pour trouver
un Intent Filter qui correspond à cet Intent
▸ Quand une correspondance est trouvée, le système démarrent
l’activité (Activity B) en invoquant onCreate et en lui passant l’intent.
2
4
INTENT IMPLICITE
Exemples d’actions prédéfinies communément utilisées
2
5
EXEMPLE
2
6