You are on page 1of 18

Chapitre V :

Les Intents

A.Hammache 1
Plan du Chapitre

Définition d’un Intent

Description d’un Intent

Types d’intent

Intent Explicite

Intent Implicite

Résolution d’un Intent

Intent Implicite avec retour de résultats


A.Hammache 2
Définition d’un Intent
• Intent, en français « intention », est un mécanisme de
communication entre les composants (activité, Service,
BroadcastReceiver) d’une application ou entre différentes
applications.
• Il offre la possibilité de passer des données d’un composant à
un autre.
• Il permet la réutilisation des applications et des composants
existants.
• Il existe de deux types d’intents :
• Explicite
• Implicite
• La classe est définie dans : android.content.Intent

A.Hammache 3
Description d’un Intent
Nous pouvons considérer l’objet intent comme un “message” contenant :
 Des informations nécéssaires cas explicite (exemple : Composant)
 Des informations nécéssaires cas implicite (exemple : action et données).

La Structure d’un Intent Est le nom du composant qu’on a


l’intention de lancer
Composant
Action à réaliser
Action
pour cibler un type d'application
Catégorie
Données Les données et leurs types sur lesquelles
l’action est réalisée
Type
Des données supplémentaires sous
Extras forme de paires clef/valeur (Bundle)
Flags
Des informations pour modifier le
comportement de l'intent.
A.Hammache 4
Types d’Intent

TYPES INTENT

IMPLICITE
EXPLICITE

•Le récepteur cible est spécifié par au


•Le récepteur cible est spécifié
moins l’action et les données type/nom.
par le nom du composant
•Le système choisit le(s) récepteur(s) qui
•Utilisé pour lancer des activités
correspond(ent) à la requête
spécifiques

A.Hammache 5
Types d’Intent

Application 1 Application 2
Intent
Activité1 Activité1
explicite
Activité 2 Service

BroadcastReceiver
BroadcastReceiver,
,
implicite
ContentProvider. ContentProvider.
Description

Ou
Android .
Exception
Resolution A.Hammache 6
L’Intent explicite
• Dans l’Intent explicite, le composant récepteur (ici on traite le lancement
d’activité) est défini par le nom de composant.
• La création d’un tel Intent est réalisée ainsi:
Intent i = new Intent(Context context, Class<?> cls);
startActivity(i);

• Context : le contexte à partir duquel l’Intent est créé. Ce paramètre fait référence la plupart du
temps à l’activité en cours (this) .
• Cls : une classe Java héritant d’Activity
• startActivity() : pour lancer l’activité spécifiée dans Cls. Sans l’attente d’un résultat.
Intent i=
new Intent(getApplicationContext(), AutreActivité.class);
startActivity(i);

A.Hammache 7
L’Intent explicite (avec résultats)
• On peut aussi lancer une activité, qui retourne des résultats:
(1) :L’activité A appelle la méthode (2): L’activité B est lancée (onCreate(Bundle).)
startActivityForResult(Intent, int). En plus de L’Intent est récupéré par un appel à la méthode
l’Intent un code identifiant la requête est soumis getIntent().

Intent + CodeRequête
Activité A Activité B
CodeRequête + ResultCode + Intent

(4) :LonActivityResult(int
CodeRequête , int (3) : setResult(int) ou setResult(int,
CodeRésultat, Intent données) est appelée. Le Intent) est appelée pour retourner le résultat. La
paramètre CodeRequête est la seule façon de faire le lien méthode finish() est invoquée pour signifier la
entre les éléments de retour fournis ici et l’appel initial à la fin de l’activité B.
méthode startActivityForResult.

A.Hammache 8
L’Intent explicite (avec résultats)
PremièreActivité

public final static int CODE= 0;


Intent intent = new Intent(this, SecondeActivité.class);
startActivityForResult(intent, CODE); 1
// Appellée lorsque la Seconde Activité termine son travail
public void onActivityResult(int CodeRequete, int CodeRésultat, Intent
intent_resultat)
{
if (CodeRequete ==CODE)
if(CodeRésultat==RESULT_OK)
int res= intent_resultat.getIntExtra ("RESULTAT",0); 4
………
}

SecondeActivité
Intent reçu= getIntent();
2
Intent envoi=new Intent();
envoi.putExtra("RESULTAT", 5);
3
setResult(RESULT_OK, envoi);
finish();
A.Hammache 9
Types des Intents

TYPES INTENT

IMPLICITE
EXPLICITE

•Le récepteur cible est spécifié par au


•Le récepteur cible est spécifié
moins l’action et les données type/nom.
par le nom du composant
•Le système choisit le(s) récepteur(s) qui
•Utilisé pour lancer des activités
correspond(ent) à la requête
spécifiques

A.Hammache 10
L’Intent Implicite
• Dans l’Intent Implicite le composant récepteur n’est pas défini. C’est le
système Android qui détermine le(s) composant(s) pouvant répondre à cet
intent, en utilisant : le nom de l’action, les données, la catégorie, etc.
• Les actions peuvent être prédéfinies (natives) ou définies par le
programmeur.
• La résolution d’un Intent est faite sur la base de la comparaison entre l’objet
intent et le IntentFilter de chaque composant.
• Exemple :

Uri uri=Uri.parse("tel:0662899541");
Intent appel= new Intent(Intent.ACTION_CALL, uri);
startActivity(appel);

A.Hammache 11
L’Intent Implicite
Quelques actions prédéfinies :

Nom d’Action Description


Composant
ACTION_ANSWER Prendre en charge un appel
Action entrant.
Catégorie ACTION_CALL Appeler un numéro de
téléphone.
Données ACTION_SENDTO Envoyer des données texte ou
Type binaires par SMS.
ACTION_EDIT Editer des données
Extras
ACTION_MAIN Démarrer comme un point
Flags d’entrée principale.
ACTION_PICK Prendre un élément à partir
d’une source de données.
ACTION_VIEW Afficher des données pour
l’utilisateur.
ACTION_SEARCH Démarrer une activité de
recherche.

A.Hammache 12
L’Intent Implicite

 Exemple d’un Intent implicite qui affiche tous les contacts


String données= "content://contacts/people/";
Uri uri=Uri.parse(données);
Intent affiche= new Intent(Intent.ACTION_VIEW, uri);
startActivity(affiche);

 Example d’un Intent implicite qui initialise une recherche sur le web.

String requête = "applications Android";


Intent recherche=new Intent(Intent.ACTION_SEARCH);
recherche.putExtra(SearchManager.QUERY, requête);
if (recherche.resolveActivity(getPackageManager()) !=null)
startActivity(recherche);

A.Hammache 13
L’Intent Implicite
La Structure d’un Intent
Composant
Action La catégorie (category) est une chaîne (String)
qui spécifié le type de composant demandé.
Catégorie
void addCategory(String)
Données
Type
Extras
Flags

Nom Catégorie Description


CATEGORY_HOME Permet d'indiquer que c'est cette activité qui doit se trouver sur l'écran d'accueil
d'Android.
CATEGORY_LAUNCHER Indique que c'est ce composant qui doit s'afficher dans le lanceur d'applications.

CATEGORY_BROWSABLE Utilisée pour indiquer qu'une activité peut être appelée depuis un navigateur web
pour afficher des données référencées par un lien.
A.Hammache 14
L’Intent Implicite
La Structure d’un Intent  Extras : permet d’insérer des données
supplémentaires.
Composant  Organisées sous forme de paires :
Action clé-valeur
 Méthodes : void putExtras(Bundle)
Catégorie Bundle getExtras()
Données
 Flags : informations additionnelles pour
Type informer Android comment lancer un
Extras composant et comment le traiter une fois
exécuté.
Flags Méthode : void addFlags(int flags)

Nom Flags Description


FLAG_ACTIVITY_NEW_TASK Permet de lancer une activité dans une nouvelle tâche, sauf si
cette dernière existe déjà dans une tâche.
FLAG_ACTIVITY_SINGLE_TOP Permet de lancer une nouvelle instance de l’activité si elle
n’est pas au top de la pile.
FLAG_ACTIVITY_CLEAR_TOP Permet de fermer toutes les activités qui se trouvent au-
dessus d'elle.
A.Hammache 15
Résolution d’un Intent
La résolution est faite sur la base de la comparaison entre
l’objet intent et le IntentFilter de chaque composant.
Un IntentFilter est attaché à une composant (activité) dans le
fichier manifest.

<activity
android:name=".IntentTesterActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW"/>
<action android:name="android.intent.action.DELETE"/>
<category android:name="android.intent.category.LAUNCHER" />
<data android:mimeType="vidéo/mpeg"/>
</intent-filter>
</activity>

A.Hammache 16
Intent Résolution d’un Intent
-Action
-Catégorie Oui
-Données Filtre Filtre
Action •L’intent ne spécifie pas l’action
catégorie
Intent Filter n Intent Filter 1
•Le filtre contient au moins l’action définie Oui
-Action -Action dans le champ Action de l’intent
Non Non
-Catégorie -Catégorie
-Données -Données •Le filtre ne spécifie aucune action

•La (es) catégorie(s) dans l’Intent correspond (ent) à celle(s) du filtre


Exception Levée •Si la catégorie n’est pas spécifiée dans l’Intent le filtre de l’activité
ActivityNotFoundExeption doit avoir la catégorie CATEGORY_DEFAULT

Android propose la Filtre


Non
liste des activités à Données
l’utilisateur Non
Oui
•Les Uri et les Type
>1
de l’Intent
=0 +
correspondent à
ceux du filtre
Nombre
=1 17
Activité exécutée A.Hammache
L’Intent implicite (avec résultats)
• On peut aussi lancer une activité, qui retourne des résultats:
(1) :L’activité A appelle la méthode (2): L’activité B est lancée
startActivityForResult(Intent, int). (2) : L’Intent est délivré (onCreate(Bundle).) L’Intent est
indirectement par récupéré par un appel à la méthode
En plus de l’Intent un code identifiant la requête
l’IntentResolver à l’activité B.
est soumis RequestCode getIntent().

Intent + RequestCode
Activité A Activité B
RequestCode + ResultCode + Intent

(4) :LonActivityResult(int requestCode, int (3) : setResult(int) ou setResult(int,


resultCode, Intent data) est appelée. Le paramètre Intent) est appelée pour retourner le résultat et
requestCode est la seule façon de faire le lien entre les probablement un code RequestCode . La méthode
éléments de retour fournis ici et l’appel initial à la méthode finish() est invoquée pour signifier la fin de
startActivityForResult. l’activité B.

A.Hammache 18

You might also like