SlideShare une entreprise Scribd logo
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>
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>
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);
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(); }
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(); 
} 
} 
}

Contenu connexe

Tendances

POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
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
 
Applications Android - cours 7 : Ressources et adaptation au matériel
Applications Android - cours 7 : Ressources et adaptation au matérielApplications Android - cours 7 : Ressources et adaptation au matériel
Applications Android - cours 7 : Ressources et adaptation au matérielAhmed-Chawki Chaouche
 
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
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielleECAM Brussels Engineering School
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
Qcm serveur 2003 souhaib el
Qcm serveur 2003 souhaib elQcm serveur 2003 souhaib el
Qcm serveur 2003 souhaib elSouhaib El
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Saber LAJILI
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveurHouda TOUKABRI
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objetAmir Souissi
 
Design patterns avec Symfony
Design patterns avec SymfonyDesign patterns avec Symfony
Design patterns avec SymfonyMohammed Rhamnia
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basicsManav Prasad
 

Tendances (20)

POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
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
 
Applications Android - cours 7 : Ressources et adaptation au matériel
Applications Android - cours 7 : Ressources et adaptation au matérielApplications Android - cours 7 : Ressources et adaptation au matériel
Applications Android - cours 7 : Ressources et adaptation au matériel
 
Tp n 3 linux
Tp n 3 linuxTp n 3 linux
Tp n 3 linux
 
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
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Java collection
Java collection Java collection
Java collection
 
Qcm serveur 2003 souhaib el
Qcm serveur 2003 souhaib elQcm serveur 2003 souhaib el
Qcm serveur 2003 souhaib el
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3
 
Active directory
Active directoryActive directory
Active directory
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveur
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
introduction à la modélisation objet
introduction à la modélisation objetintroduction à la modélisation objet
introduction à la modélisation objet
 
Design patterns avec Symfony
Design patterns avec SymfonyDesign patterns avec Symfony
Design patterns avec Symfony
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
C# Basics
C# BasicsC# Basics
C# Basics
 

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(); } } }