Vous êtes sur la page 1sur 11

Institut Supérieur des Etudes Technologiques de Béja

DÉVELOPPEMENT MOBILE
Enseignante: Mme. Haïfa Chorfi

CHAPITRE 4 : COMMUNICATION ENTRE APPLICATIONS : INTENT


Niveau : 2ème ANNÉE LICENCE APPLIQUÉE SEM2

Mme. Haifa CHORFI 131

131

Introduction

Au cœur du système Android, les Intents forment un mécanisme


sophistiqué et complet permettant aux activités et aux applications
d’interagir entre elles.
La communication interne du système Android est basée sur l’envoi et
la réception de messages exprimant l’intention d’une action.

132 Mme. Haifa CHORFI

132

Mme Haifa Chorfi Sayari 1


Introduction
Chacun de ces messages peut être émis à destination :
d’un autre composant de la même application (une activité, un
service, etc.)
D’un composant d’une toute autre application.

Issu de la classe Intent, ce message permet de véhiculer toutes les


informations nécessaires à la réalisation de l’action :
informations à destination du composant qui le réceptionnera (action
à effectuer et les données avec lesquelles agir) ;
informations nécessaires au système pour son traitement (catégorie
du composant cible du message et instructions d’exécution de
l’action).

133 Mme. Haifa CHORFI

133

Introduction
On peut envoyer des Intents au système de deux façons :
soit en ciblant un composant précis d’une application : on
parle alors de mode explicite
soit en laissant le système envoyer le traitement (ou non) de
cette demande au composant le plus approprié : on parle
alors de mode implicite

134 Mme. Haifa CHORFI

134

Mme Haifa Chorfi Sayari 2


Principe de fonctionnement
Les objets Intent ont essentiellement trois utilisations, ils
permettent
de solliciter d’autres applications : Elle transmet son
intention au système qui, lui, va se charger trouver
l’application et le composant le plus approprié puis démarrer
ce dernier et lui transmettre l’Intent correspondant. On
parle alors de résolution de l’intention
de démarrer une activité au sein de l’application courante :
C’est le seul cas où on devra démarrer une activité en mode
explicite.
d’envoyer des informations.

135 Mme. Haifa CHORFI

135

Principe de fonctionnement
Les Intents ont aussi d’autres utilisations:
démarrer d’un service (par exemple pour un service de
lecteur multimédia, les actions pourront être de lire une
musique, passer à la chanson suivante ou encore mettre la
lecture en pause en cas d’appel entrant) .
diffuser un objet Intent à plusieurs applications (par exemple
pour informer l’ensemble des applications ouvertes que la
batterie est défaillante).

136 Mme. Haifa CHORFI

136

Mme Haifa Chorfi Sayari 3


Sollicitation d’autres applications
Qu’en est-il si vous souhaitez faire appel à un composant d’une autre
application ? Par exemple pour ouvrir une page web ?
La réponse est : toujours en utilisant un Intent
L’envoi d’un Intent permet également de demander à un composant
d’une autre application de traiter l’action que on souhaite réaliser.
C’est le système qui décide alors de l’application à utiliser.
Pour décider du composant le plus approprié, le système se base sur
les informations que vous spécifiez dans votre objet Intent: action,
données, catégorie, etc.

137 Mme. Haifa CHORFI

137

Sollicitation d’autres applications


Le système se chargera de résoudre l’intention pour proposer le
composant de l’application le plus approprié.
Ce mécanisme permet d’éviter les dépendances vers des applications
puisque l’association entre votre application et le composant
nécessaire se fait au moment de l’exécution et non de la
compilation. Cela permet de lancer des activités en fonction du
contexte et de ne pas se soucier de l’application qui sera réellement
utilisée.

138 Mme. Haifa CHORFI

138

Mme Haifa Chorfi Sayari 4


Sollicitation d’autres applications
Ce système d’utilisation d’Intent implicite, puisque le système
doit résoudre celle-ci en fonction de son environnement, recourt à
des filtres comme points d’entrée pour distribuer les intents aux
composants les plus appropriés.
Les informations qui sont utilisées pour la résolution sont : l’action,
les données (l’URI et le type de contenu MIME) et la catégorie.
Les autres données ne jouent pas de rôle dans la résolution et la
distribution des Intent aux applications

139 Mme. Haifa CHORFI

139

Sollicitation d’autres applications


Exemple d’Intent implicite : Appel téléphonique
Pour pouvoir demander au système de réaliser cette action :
créer un nouvel objet Intent dont nous spécifions le type d’action
(ACTION_DIAL permettant de demander au système de composer un
numéro) et les valeurs complémentaires dans le constructeur ; et cela sans
préciser le type de la classe ciblée.
démarrer une nouvelle activité en spécifiant cet objet Intent.
Le système détermine, en fonction des filtres d’Intents déclarés par les
applications à quel composant d’une quelconque application envoyer cette
demande d’action.

Syntaxe :
Intent I = new Intent (ACTION, [URI]);
startActivity(I);

140 Mme. Haifa CHORFI

140

Mme Haifa Chorfi Sayari 5


Sollicitation d’autres applications
Exemple d’Intent implicite : Appel téléphonique
Uri uri = Uri.parse("tel:0612345678");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent) ;

Remarque :
Le format des URI spécifiés comme données pour
les actions dépendent du type d’action. Quoiqu’il
en soit, la composition d’un URI se découpe toujours selon le format
suivant : schéma://hote:port/chemin.
Le schéma ‘tel’ permet d’émettre un numéro de téléphone,
‘market’ d’atteindre l’Android Market,
www’ d’ouvrir une page web, etc

141 Mme. Haifa CHORFI

141

Actions natives sous Android

142 Mme. Haifa CHORFI

142

Mme Haifa Chorfi Sayari 6


Sollicitation d’autres applications
Exemples d’utilisation d’actions natives
Lancer l’Android Market avec un Intent
Uri application= Uri.parse("market://search?q=pub:\"Nicolas
et Emmanuel\"");
Intent I = new Intent(Intent.ACTION_VIEW, application);
startActivity(I);

Démarrer un navigateur internet


Uri site = Uri.parse("http://www.google.fr/");
Intent I = new Intent(Intent.ACTION_VIEW, site);
startActivity(I);

Affichage d’un emplacement sur Google Maps


Uri coordonnées =Uri.parse("geo:" + lat.toString()+",”+lon.toString());
Intent I =new Intent(Intent.ACTION_VIEW, coordonnées);
startActivity(I);

143
Mme. Haifa CHORFI

143

Navigation entre écrans au sein d’une


application
La principale utilisation d’un Intent est le démarrage de ces activités
(une à la fois) permettant un enchaînement.
Chaque composant de votre application nécessitera l’emploi d’un
Intent pour être démarré.

144 Mme. Haifa CHORFI

144

Mme Haifa Chorfi Sayari 7


Navigation entre écrans au sein d’une application
Démarrage d’une activité

Pour démarrer une activité sans attendre de retour, on utilise la


méthode startActivity avec comme paramètre une instance de la
classe Intent spécifiant le type de classe de l’activité à exécuter.
Syntaxe :
Intent intent = new Intent(this,ActiviteADemarrer.class);
startActivity(intent);

Le constructeur de la classe Intent prend les paramètres suivants :


Context PackageContext : le contexte à partir duquel l’Intent est
créé et sera envoyé. Ce paramètre fait référence la plupart du temps à
l’activité en cours pointée par le mot clef this ;
Class<?> cls : un type de classe Java héritant de la classe Activity et
pointé ici par le mot clef ActiviteADemarrer.class.
145 Mme. Haifa CHORFI

145

Navigation entre écrans au sein d’une application


Démarrage d’une activité
Remarque :
Avant de pouvoir démarrer l’activité, il faut au préalable la déclarer
dans le fichier de configuration AndroidManifest.xml de
l’application. Sans cela, une erreur du type
ActivityNotFoundException sera générée lors de l’appel de la
méthode startActivity.

Exemple : un exemple de déclaration pour une activité s’appelant


MonActivite dans AndroidManifest.xml
<application ...>
<activity android:name=".MonActivite" />
</application>

146 Mme. Haifa CHORFI

146

Mme Haifa Chorfi Sayari 8


Envoie des informations
Lorsque vous demandez à un autre composant de réaliser une action,
vous devrez bien souvent spécifier d’autres données
supplémentaires. (Par exemple, si vous souhaitez ouvrir une activité
contenant un navigateur web, on peut transférer une adresse web).
L’objet Bundle permet de véhiculer les données transférées d’une
activité à une autre.
La classe Intent dispose de méthodes grâce auxquelles un objet de
type Bundle véhiculera les données d’une activité à une autre.
putExtra : utilisée dans l’activité appelante et permet l’insertion de
données à transmettre dans le conteneur.
getExtra : utilisée dans l’activité appelée et permet d’extraire les
données reçues.

147 Mme. Haifa CHORFI

147

Envoie des informations


L’échange des données se fait par l’association d’une clé
(représentée par une chaîne de caractères) à une donnée à échanger.

Pour ajouter chaque donnée à échanger, il faut appeler la méthode


putExtra avec la clé et la donnée à échanger.
La méthode putExtra prend deux paramètres:
String name : la clef unique permettant d’identifier la donnée dans la
collection du Bundle
value : la donnée à échanger.

148 Mme. Haifa CHORFI

148

Mme Haifa Chorfi Sayari 9


Envoie des informations
Syntaxe : Intent.putExtra(clé, valeur);
Exemple:
Intent I = new Intent (this, Connexion.class);
I. putExtra("username", "haifa");
I.putExtra("password","12345");
startActivityForResult(I,CODE) ;

149 Mme. Haifa CHORFI

149

Envoie des informations


Une fois l’intention reçue par l’application, via une instance de la
classe Intent, vous pourrez récupérer les données contenues dans
l’objet Bundle transmis à l’aide de la méthode getExtras.
Une fois l’objet Bundle récupéré, appelez l’une des méthodes
getXXX correspondant au type de la donnée recherchée (getString
pour une donnée de type String, getInt pour une donnée de type Int,
etc.) en spécifiant le nom de la clé associée pour récupérer les
informations.

150 Mme. Haifa CHORFI

150

Mme Haifa Chorfi Sayari 10


Envoie des informations
Exemple :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Récupérer l’objet Bundle
Bundle extra = this.getIntent().getExtras();
if(extra != null) {
String user = extra.getString(“username");
String pwd = extra.getString(“password");
}
}

151 Mme. Haifa CHORFI

151

Exercice

Activité CalcMoyenne Activité Réussite Activité Echec

152 Mme. Haifa CHORFI

152

Mme Haifa Chorfi Sayari 11

Vous aimerez peut-être aussi