SlideShare une entreprise Scribd logo

Les intents sous Android

Les intents sous Android I. Types de transmission d'Intent II. Structure d'un Intent IV. Intent Filter V. Les différents types d'Intents VI. Transfert de données entre activités VII. Exercice : Utilisation des Intent de passer d'une activité à l'autre envoyer des données via putExtra

1  sur  10
Télécharger pour lire hors ligne
M.Houssem LAHIANI 
1 
Cours de programmation sous Android 
Responsable de matière : Monsieur Houssem Lahiani. 
Chapitre 4 : Les intents sous Android 
Plan du chapitre 
Cours de programmation sous Android .............................................................................................................................. 1 
Chapitre 4 : Les intents sous Android ................................................................................................................................. 2 
I. Types de transmission d'Intent ............................................................................................................................... 2 
II. Structure d'un Intent ............................................................................................................................................... 2 
III. Actions d'Intent prédéfinies ................................................................................................................................ 2 
IV. Intent Filter .......................................................................................................................................................... 3 
V. Les différents types d'Intents .................................................................................................................................. 3 
VI. Transfert de données entre activités .................................................................................................................. 4 
VII. Exercice : Utilisation des Intent de passer d'une activité à l'autre envoyer des données via putExtra ........... 5
M.Houssem LAHIANI 
2 
Chapitre 4 : Les intents sous Android 
Les Intents sont des messages asynchrones qui permettent aux composants d'une application de demander des fonctionnalités à d’autres composants Android. Les Intents vous permettent d'interagir avec vos propres composants ou des composants d'autres applications. Par exemple, une activité peut démarrer une autre activité pour prendre une photo. 
Les Intents sont des objets de type android.content.Intent. Votre code peut les envoyer au système Android pour définir les composants que vous ciblez. Par exemple à travers la méthode startActivity(), vous pouvez définir que cet Intent doit être utilisé pour démarrer une activité. 
Un Intent peut avoir des données dans un Bundle. Ces données peuvent être utilisées par le composant qui traite l'Intent. 
I. Types de transmission d'Intent 
 Unicast: vers un composant explicitement nommé :vers une classe Java. 
 Anycast: vers un composant assurant une certaine action (visualisation, édition, launcher, ...) sur certain type de données. 
 Multicast: diffusion vers des recepteur de broadcast inscrit pour recevoir un type d'Intent. 
 Par défaut, la communication est uni-directionnel, mais on peut répondre à un Intent par un autre Intent. 
II. Structure d'un Intent 
 Un Intent est constitué de : 
– Action à réaliser 
– Donnée sur laquelle réaliser l'action sous forme d'URI (setData()) ou d'un type MIME (setType()) 
– Paramètre optionnels (EXTRA) 
 Création d'un Intent 
– Intent(Context, Class<?>) pour l'appels explicite 
– Intent(String action, URI) pour l'appel implicite 
– addCategory(String category) ajout de catégories 
– putExtra(String key,value) 
– setFlags(flags) permission sur les données, relation activité/BackStack. 
III. Actions d'Intent prédéfinies 
ACTION_MAIN: action principale 
ACTION_VIEW: visualiser une donnée
M.Houssem LAHIANI 
3 
ACTION_ATTACH_DATAT: attachement de donnée 
ACTION_EDIT: Edition de donnée 
ACTION_PICK: Choisir un répertoire de donnée 
ACTION_CHOOSER: menu de choix pour l'utilisateur 
– EXTRA_INTENT contient l'Intent original, EXTRA_TITLE le titre du menu 
ACTION_GET_CONTENT: obtenir un contenu suivant un type MIME 
ACTION_SEND: envoyé un message (EXTRA_TEXT|EXTRA_STREAM) à un destinataire non spécifié 
ACTION_SEND_TO: on spécifie le destinataire dans l'URI 
ACTION_INSERT: on ajoute un élement virge dans le répertoire spécifié par l'URI 
ACTION_DELETE: on supprime l'élement désigné par l'URI 
ACTION_PICK_ACTIVITY: menu de sélection selon l'EXTRA_INTENT mais ne lance pas l'activité 
ACTION_SEARCH: effectue une recherche 
etc. 
IV. Intent Filter 
Définie dans le AndroidManifest.xml dans la balise <activity> 
Nom de l'action 
<action android:name=”XXX”/> 
Category 
<category android:name=”XXX”/> 
Android.intent.category.[DEFAULT|BROWSABLE|TAB| 
ALTERNATIVE|LAUNCHER|HOME|PREFERENCE|TEST] 
Type MIME 
<category android:mimeType=”XXX”/> 
Exemples 
 Définir l’activité principale qui se lance en premier lieu dans l’application 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
 Mon activité sait lire et éditer les images JPEG 
<intent-filter android:label="@string/jpeg_editor"> 
<action android:name="android.intent.action.VIEW" /> 
<action android:name="android.intent.action.EDIT" /> 
<data android:mimeType="image/jpeg" /> 
</intent-filter> 
V. Les différents types d'Intents 
Android supporte les Intents explicites et implicites. 
Une application peut définir les composants cibles directement dans l'Intent (Intent explicite) ou demander au système Android de rechercher le composant adéquat en se basant sur les données de l'Intent (Intent implicite).
M.Houssem LAHIANI 
4 
1. Les Intents explicites 
Les Intents explicites définissent explicitement le composant qui doit être appelé par le système Android en utilisant le nom de classe Java comme identifiant. 
L'exemple suivant montre comment créer un Intent explicite et comment l'envoyer au système Android. Si cette classe représente une activité, le système Android la démarrera. 
Intent i = new Intent(this, ActivityTwo.class); 
//Envoi de données à la seconde activité 
i.putExtra("Value1", "This value one for ActivityTwo "); 
i.putExtra("Value2", "This value two for ActivityTwo"); 
//Pour démarrer l’intent 
i.startActivity(i); 
Les Intents explicites sont généralement utilisés au sein d'une application car les classes de cette application sont contrôlées par le développeur de l'application. 
2. Les Intents implicites 
Les Intents implicites précisent l'action qui devrait être effectuée avec éventuellement les données pour cette action. 
Par exemple, ce qui suit indique au système Android d'afficher une page Web. Tous les navigateurs Web installés doivent être enregistrés avec l'Intent correspondant en utilisant un Intent Filter. 
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://houssem-lahiani.blogspot.com/")); 
startActivity(i); 
Si un Intent explicite est envoyé au système Android, il recherche tous les composants qui sont enregistrés avec l'action spécifique et le type de données approprié. 
VI. Transfert de données entre activités 
Un Intent contient l'action et éventuellement des données complémentaires. Le composant qui crée l'Intent peut y ajouter des données avec la méthode surchargée putExtra(). Les données supplémentaires sont des paires clé/valeur, la clé est toujours une chaîne. En valeur, vous pouvez utiliser les types de données primitifs (int, float, ..) ainsi que les types String, Bundle, Parcelable et Serializable. 
Le composant récepteur peut accéder à ces informations avec les méthodes getAction() et getData() sur l'objet Intent. Cet objet Intent peut être récupéré avec la méthode getIntent(). 
Le composant qui reçoit l'Intent peut utiliser la méthode getIntent().getExtras () pour obtenir les données supplémentaires. 
Bundle extras = getIntent().getExtras(); 
if (extras == null) { 
return; 
} 
// Get data via the key 
String value1 = extras.getString(Intent.EXTRA_TEXT); 
if (value1 != null) {}
M.Houssem LAHIANI 
5 
VII. Exercice : Utilisation des Intents pour passer d'une activité à une autre et envoyer des données via putExtra 
Dans cet exercice, nous allons voir comment passer d'une activité à une autre en envoyant des données après avoir cliqué sur le bouton. Créez un nouveau projet dans votre éclipse (File ==> New ==> Android Application Poject) et donner le nom de «Intention» de votre projet. 
Dans votre activity_main.xml mettez ce code: 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="${relativePackage}.${activityClass}" > 
<Button 
android:id="@+id/intent" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentLeft="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentTop="true" 
android:text="Click me !" /> 
</RelativeLayout> 
Dans votre classe MainActivity.java mettez ce code : 
public class MainActivity extends Activity { 
Button btn; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
btn=(Button)findViewById(R.id.intent); 
btn.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
} 
}); 
}}
M.Houssem LAHIANI 
6 
Maintenant, ajoutez « a new android xml file » dans votre dossier layout et donnez lui le nom de second_activity.xml: Faites un clic droit sur le dossier layout ==> New ==> Android XML File. 
Mettez ce code dans votre fichier second_activity.xml: 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<TextView 
android:id="@+id/text" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:text="TextView" /> 
</LinearLayout> 
Après cela ajouter une nouvelle activité (classe java) dans votre package situé dans le dossier src et donnez-lui ce nom : «Second». 
Cette nouvelle classe (Second.java) dans laquelle nous pouvons faire appel à notre interface avec setContentView (View) doit hériter de la classe Activity et doit contenir la méthode "onCreate()" pour appeler (avec setContentView(View)) notre layout "second_activity.xml "récemment ajouté. 
La classe Second.java doit contenir ce code : 
public class Second extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.second_activity); 
}} 
N'oubliez pas de déclarer votre nouvelle activité (Second) dans le fichier AndroidManifest.xml. 
A l'intérieur de la balise XML <application> .... </ application> du fichier AndroidManifest.xml mettez ce code : 
<activity 
android:name=".Second" 
android:label="@string/app_name" > 
</activity>
Publicité

Recommandé

Les interface graphiques sous android
Les interface graphiques sous androidLes interface graphiques sous android
Les interface graphiques sous androidHoussem Lahiani
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésLilia Sfaxi
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menusLilia Sfaxi
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 
Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)Applications Android - cours 3 : Android Studio (Outil de développement)
Applications Android - cours 3 : Android Studio (Outil de développement)Ahmed-Chawki Chaouche
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 

Contenu connexe

Tendances

Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications AndroidLilia Sfaxi
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques androidLilia Sfaxi
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsLilia Sfaxi
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursLilia Sfaxi
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidHoussem Lahiani
 
Broadcast Receivers in Android
Broadcast Receivers in AndroidBroadcast Receivers in Android
Broadcast Receivers in Androidma-polimi
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepGuo Albert
 
Applications Android - cours 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet AndroidAhmed-Chawki Chaouche
 
P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à androidLilia Sfaxi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 

Tendances (20)

Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Chp5 - Applications Android
Chp5 - Applications AndroidChp5 - Applications Android
Chp5 - Applications Android
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques android
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
P5 stockage
P5 stockageP5 stockage
P5 stockage
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateurs
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Tp4 - PHP
Tp4 - PHPTp4 - PHP
Tp4 - PHP
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'Android
 
Broadcast Receivers in Android
Broadcast Receivers in AndroidBroadcast Receivers in Android
Broadcast Receivers in Android
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Applications Android - cours 6 : Structure d’un projet Android
Applications Android - cours 6 :  Structure d’un projet AndroidApplications Android - cours 6 :  Structure d’un projet Android
Applications Android - cours 6 : Structure d’un projet Android
 
P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à android
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Design pattern-presentation
Design pattern-presentationDesign pattern-presentation
Design pattern-presentation
 

En vedette

Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à AndroidYoann Gotthilf
 
Les vues (views) sous android
Les vues (views) sous androidLes vues (views) sous android
Les vues (views) sous androidHoussem Lahiani
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidHoussem Lahiani
 
Android pour les debutants
Android pour les debutantsAndroid pour les debutants
Android pour les debutantsAmira Hakim
 
NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introductionToxicode
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des appsNoé Breiss
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)TECOS
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)G²FOSS ENIT
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm
 
Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm
 
Introduction au développement iOS par Pascal Batty - 131112
Introduction au développement iOS par Pascal Batty - 131112Introduction au développement iOS par Pascal Batty - 131112
Introduction au développement iOS par Pascal Batty - 131112SOAT
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node jsHoracio Gonzalez
 
Développement Android
Développement AndroidDéveloppement Android
Développement AndroidFranck SIMON
 

En vedette (19)

Introduction à Android
Introduction à AndroidIntroduction à Android
Introduction à Android
 
Les vues (views) sous android
Les vues (views) sous androidLes vues (views) sous android
Les vues (views) sous android
 
Cycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'AndroidCycle de vie d'activité Android et les composant d'Android
Cycle de vie d'activité Android et les composant d'Android
 
Android wear
Android wearAndroid wear
Android wear
 
Android pour les debutants
Android pour les debutantsAndroid pour les debutants
Android pour les debutants
 
Cours 1 Android
Cours 1 AndroidCours 1 Android
Cours 1 Android
 
NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introduction
 
Android
AndroidAndroid
Android
 
Tutorial android - créer des apps
Tutorial android - créer des appsTutorial android - créer des apps
Tutorial android - créer des apps
 
Android pour l'industrie
Android pour l'industrieAndroid pour l'industrie
Android pour l'industrie
 
01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)01 programmation mobile - android - (introduction)
01 programmation mobile - android - (introduction)
 
Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)Formation Android (Initiation à la programmation sous Android)
Formation Android (Initiation à la programmation sous Android)
 
Alphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, AndroidAlphorm.com Formation Windev Mobile 19, Android
Alphorm.com Formation Windev Mobile 19, Android
 
Alphorm.com Formation Android 5
Alphorm.com Formation Android 5Alphorm.com Formation Android 5
Alphorm.com Formation Android 5
 
Introduction au développement iOS par Pascal Batty - 131112
Introduction au développement iOS par Pascal Batty - 131112Introduction au développement iOS par Pascal Batty - 131112
Introduction au développement iOS par Pascal Batty - 131112
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node js
 
Développement Android
Développement AndroidDéveloppement Android
Développement Android
 
Développement Sous Android
Développement Sous AndroidDéveloppement Sous Android
Développement Sous Android
 

Similaire à Les intents sous Android

Similaire à Les intents sous Android (20)

Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
 
TP_1.pdf
TP_1.pdfTP_1.pdf
TP_1.pdf
 
5.ateliers avancés
5.ateliers avancés5.ateliers avancés
5.ateliers avancés
 
Android: Les intents
Android: Les intentsAndroid: Les intents
Android: Les intents
 
Chapitre 5 android
Chapitre 5 androidChapitre 5 android
Chapitre 5 android
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
 
Android introvf
Android introvfAndroid introvf
Android introvf
 
Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.Mise en place de l'ActionBarCompat dans vos projets Android.
Mise en place de l'ActionBarCompat dans vos projets Android.
 
My droid
My droidMy droid
My droid
 
Android2017 cours2
Android2017 cours2Android2017 cours2
Android2017 cours2
 
Chap android
Chap androidChap android
Chap android
 
Ch2. Développement mobile
Ch2. Développement mobileCh2. Développement mobile
Ch2. Développement mobile
 
Tutorial android
Tutorial androidTutorial android
Tutorial android
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPress
 
Détection des mobiles
Détection des mobilesDétection des mobiles
Détection des mobiles
 
Android
AndroidAndroid
Android
 
Android2 composant-layout-menu (1)
Android2 composant-layout-menu (1)Android2 composant-layout-menu (1)
Android2 composant-layout-menu (1)
 

Les intents sous Android

  • 1. M.Houssem LAHIANI 1 Cours de programmation sous Android Responsable de matière : Monsieur Houssem Lahiani. Chapitre 4 : Les intents sous Android Plan du chapitre Cours de programmation sous Android .............................................................................................................................. 1 Chapitre 4 : Les intents sous Android ................................................................................................................................. 2 I. Types de transmission d'Intent ............................................................................................................................... 2 II. Structure d'un Intent ............................................................................................................................................... 2 III. Actions d'Intent prédéfinies ................................................................................................................................ 2 IV. Intent Filter .......................................................................................................................................................... 3 V. Les différents types d'Intents .................................................................................................................................. 3 VI. Transfert de données entre activités .................................................................................................................. 4 VII. Exercice : Utilisation des Intent de passer d'une activité à l'autre envoyer des données via putExtra ........... 5
  • 2. M.Houssem LAHIANI 2 Chapitre 4 : Les intents sous Android Les Intents sont des messages asynchrones qui permettent aux composants d'une application de demander des fonctionnalités à d’autres composants Android. Les Intents vous permettent d'interagir avec vos propres composants ou des composants d'autres applications. Par exemple, une activité peut démarrer une autre activité pour prendre une photo. Les Intents sont des objets de type android.content.Intent. Votre code peut les envoyer au système Android pour définir les composants que vous ciblez. Par exemple à travers la méthode startActivity(), vous pouvez définir que cet Intent doit être utilisé pour démarrer une activité. Un Intent peut avoir des données dans un Bundle. Ces données peuvent être utilisées par le composant qui traite l'Intent. I. Types de transmission d'Intent  Unicast: vers un composant explicitement nommé :vers une classe Java.  Anycast: vers un composant assurant une certaine action (visualisation, édition, launcher, ...) sur certain type de données.  Multicast: diffusion vers des recepteur de broadcast inscrit pour recevoir un type d'Intent.  Par défaut, la communication est uni-directionnel, mais on peut répondre à un Intent par un autre Intent. II. Structure d'un Intent  Un Intent est constitué de : – Action à réaliser – Donnée sur laquelle réaliser l'action sous forme d'URI (setData()) ou d'un type MIME (setType()) – Paramètre optionnels (EXTRA)  Création d'un Intent – Intent(Context, Class<?>) pour l'appels explicite – Intent(String action, URI) pour l'appel implicite – addCategory(String category) ajout de catégories – putExtra(String key,value) – setFlags(flags) permission sur les données, relation activité/BackStack. III. Actions d'Intent prédéfinies ACTION_MAIN: action principale ACTION_VIEW: visualiser une donnée
  • 3. M.Houssem LAHIANI 3 ACTION_ATTACH_DATAT: attachement de donnée ACTION_EDIT: Edition de donnée ACTION_PICK: Choisir un répertoire de donnée ACTION_CHOOSER: menu de choix pour l'utilisateur – EXTRA_INTENT contient l'Intent original, EXTRA_TITLE le titre du menu ACTION_GET_CONTENT: obtenir un contenu suivant un type MIME ACTION_SEND: envoyé un message (EXTRA_TEXT|EXTRA_STREAM) à un destinataire non spécifié ACTION_SEND_TO: on spécifie le destinataire dans l'URI ACTION_INSERT: on ajoute un élement virge dans le répertoire spécifié par l'URI ACTION_DELETE: on supprime l'élement désigné par l'URI ACTION_PICK_ACTIVITY: menu de sélection selon l'EXTRA_INTENT mais ne lance pas l'activité ACTION_SEARCH: effectue une recherche etc. IV. Intent Filter Définie dans le AndroidManifest.xml dans la balise <activity> Nom de l'action <action android:name=”XXX”/> Category <category android:name=”XXX”/> Android.intent.category.[DEFAULT|BROWSABLE|TAB| ALTERNATIVE|LAUNCHER|HOME|PREFERENCE|TEST] Type MIME <category android:mimeType=”XXX”/> Exemples  Définir l’activité principale qui se lance en premier lieu dans l’application <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>  Mon activité sait lire et éditer les images JPEG <intent-filter android:label="@string/jpeg_editor"> <action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.EDIT" /> <data android:mimeType="image/jpeg" /> </intent-filter> V. Les différents types d'Intents Android supporte les Intents explicites et implicites. Une application peut définir les composants cibles directement dans l'Intent (Intent explicite) ou demander au système Android de rechercher le composant adéquat en se basant sur les données de l'Intent (Intent implicite).
  • 4. M.Houssem LAHIANI 4 1. Les Intents explicites Les Intents explicites définissent explicitement le composant qui doit être appelé par le système Android en utilisant le nom de classe Java comme identifiant. L'exemple suivant montre comment créer un Intent explicite et comment l'envoyer au système Android. Si cette classe représente une activité, le système Android la démarrera. Intent i = new Intent(this, ActivityTwo.class); //Envoi de données à la seconde activité i.putExtra("Value1", "This value one for ActivityTwo "); i.putExtra("Value2", "This value two for ActivityTwo"); //Pour démarrer l’intent i.startActivity(i); Les Intents explicites sont généralement utilisés au sein d'une application car les classes de cette application sont contrôlées par le développeur de l'application. 2. Les Intents implicites Les Intents implicites précisent l'action qui devrait être effectuée avec éventuellement les données pour cette action. Par exemple, ce qui suit indique au système Android d'afficher une page Web. Tous les navigateurs Web installés doivent être enregistrés avec l'Intent correspondant en utilisant un Intent Filter. Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://houssem-lahiani.blogspot.com/")); startActivity(i); Si un Intent explicite est envoyé au système Android, il recherche tous les composants qui sont enregistrés avec l'action spécifique et le type de données approprié. VI. Transfert de données entre activités Un Intent contient l'action et éventuellement des données complémentaires. Le composant qui crée l'Intent peut y ajouter des données avec la méthode surchargée putExtra(). Les données supplémentaires sont des paires clé/valeur, la clé est toujours une chaîne. En valeur, vous pouvez utiliser les types de données primitifs (int, float, ..) ainsi que les types String, Bundle, Parcelable et Serializable. Le composant récepteur peut accéder à ces informations avec les méthodes getAction() et getData() sur l'objet Intent. Cet objet Intent peut être récupéré avec la méthode getIntent(). Le composant qui reçoit l'Intent peut utiliser la méthode getIntent().getExtras () pour obtenir les données supplémentaires. Bundle extras = getIntent().getExtras(); if (extras == null) { return; } // Get data via the key String value1 = extras.getString(Intent.EXTRA_TEXT); if (value1 != null) {}
  • 5. M.Houssem LAHIANI 5 VII. Exercice : Utilisation des Intents pour passer d'une activité à une autre et envoyer des données via putExtra Dans cet exercice, nous allons voir comment passer d'une activité à une autre en envoyant des données après avoir cliqué sur le bouton. Créez un nouveau projet dans votre éclipse (File ==> New ==> Android Application Poject) et donner le nom de «Intention» de votre projet. Dans votre activity_main.xml mettez ce code: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <Button android:id="@+id/intent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="Click me !" /> </RelativeLayout> Dans votre classe MainActivity.java mettez ce code : public class MainActivity extends Activity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.intent); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); }}
  • 6. M.Houssem LAHIANI 6 Maintenant, ajoutez « a new android xml file » dans votre dossier layout et donnez lui le nom de second_activity.xml: Faites un clic droit sur le dossier layout ==> New ==> Android XML File. Mettez ce code dans votre fichier second_activity.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> Après cela ajouter une nouvelle activité (classe java) dans votre package situé dans le dossier src et donnez-lui ce nom : «Second». Cette nouvelle classe (Second.java) dans laquelle nous pouvons faire appel à notre interface avec setContentView (View) doit hériter de la classe Activity et doit contenir la méthode "onCreate()" pour appeler (avec setContentView(View)) notre layout "second_activity.xml "récemment ajouté. La classe Second.java doit contenir ce code : public class Second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); }} N'oubliez pas de déclarer votre nouvelle activité (Second) dans le fichier AndroidManifest.xml. A l'intérieur de la balise XML <application> .... </ application> du fichier AndroidManifest.xml mettez ce code : <activity android:name=".Second" android:label="@string/app_name" > </activity>
  • 7. M.Houssem LAHIANI 7 Votre AndroidManifest.xml sera semblable à ce code : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.intention" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Second" android:label="@string/app_name" > </activity> </application> </manifest>
  • 8. M.Houssem LAHIANI 8 Maintenant, ce que nous voulons faire est de passer de la "MainActivity" à "Second", nous devons utiliser une intent pour le faire. Alors maintenant, nous devons ajouter ces deux lignes dans la methode onClick () de notre bouton pour passer de MainActivity à Second : public class MainActivity extends Activity { Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.intent); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intention = new Intent(MainActivity.this, Second.class); startActivity(intention); } }); } } Maintenant, exécutez votre projet et vous verrez ce qui se passera lorsque vous cliquez sur le bouton "Click me!". Mais si nous voulons envoyer des données de l'activité principale de la deuxième activité que ferons-nous ? Nous allons créer une variable de type String dans le MainActivity.java dans laquelle nous allons mettre un texte. Ce texte doit être affiché dans un toast après le déplacement de la première activité vers la seconde .Donc la valeur de cette chaîne doit être envoyé dans l’Intent avec la méthode "putExtra". Nous allons commencer par déclarer notre variable de type String. String value="Hello World!!!!"; Nous devons mettre cette variable dans notre méthode putExtra () après la déclaration de l’Intent. intention.putExtra("send", value);
  • 9. M.Houssem LAHIANI 9 Le composant qui crée l'Intent peut y ajouter des données avec la méthode surchargée putExtra(). Les données supplémentaires sont des paires clé ("send")/valeur(value), la clé est toujours une chaîne. En valeur, vous pouvez utiliser les types de données primitifs (int, float, ..) ainsi que les types String, Bundle, Parcelable et Serializable. Notre MainActivity aura ce code : public class MainActivity extends Activity { Button btn; String value="Hello World!!!!"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn=(Button)findViewById(R.id.intent); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intention = new Intent(MainActivity.this, Second.class); intention.putExtra("send", value); startActivity(intention); } });}} La question se pose maintenant : comment la classe "Second.java" pourrait récupérer les données qui ont été envoyées ? Nous devons créer un Bundle dans la classe Second.java pour récupérer les valeurs provenant de la classe « MainActivity.java ». Bundle extras= getIntent().getExtras(); getExtras():récupère les données qui ont été ajouté à l'aide putExtra (). getIntent () retourne l'Intent qui a démarré cette activité. Après ceci, nous devons créer une variable de type String pour avoir la chaîne passée avec l'Intent et par la suite nous allons créer un Toast pour nous montrer le contenu de cette chaîne. if(extras != null) { String newString=extras.getString("send"); Toast.makeText(Second.this,newString, Toast.LENGTH_LONG).show(); }
  • 10. M.Houssem LAHIANI 10 Donc le code que la classe Second.java doit contenir ressemble à ceci : public class Second extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); Bundle extras= getIntent().getExtras(); if(extras != null) { String newString=extras.getString("send"); Toast.makeText(Second.this,newString, Toast.LENGTH_LONG).show(); } } }