Les intents sous Android

1 500 vues

Publié le

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

Publié dans : Mobile
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 500
Sur SlideShare
0
Issues des intégrations
0
Intégrations
11
Actions
Partages
0
Téléchargements
71
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Les intents sous Android

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

×