SlideShare une entreprise Scribd logo

Chapitre 5 android

Institut Supérieur des Etudes Technologiques de Nabeul
Institut Supérieur des Etudes Technologiques de Nabeul
Institut Supérieur des Etudes Technologiques de NabeulMaître Technologue en Informatique Industrielle à Institut Supérieur des Etudes Technologiques de Nabeul

La gestion des événements et les Intents

Chapitre 5 android

1  sur  46
LALA GESTIONGESTION DESDES ÉVÉNEMENTSÉVÉNEMENTS
ETET LESLES INTENTSINTENTS
2017-2018
© Imene Sghaier
ISET NabeulISET Nabeul
SEM2 & Mastère SEM1SEM2 & Mastère SEM1
OBJECTIFS ET ÉLÉMENTS DE CONTENU
 Objectifs spécifiques
 S’initier au control et gestion des évènement et à la notion d’intent implicite et explicite
 Se familiariser avec le control d’évènements et la navigation entre activités et applications
 Eléments de contenu
 La gestion des évènements
 Les intents
 L’enchainement des écrans avec des intents explicites
 Les intents implicites
 Actions
 Méthodes d’invocations d’intents
 Appel Téléphonique
 Envoi de mails
 Voir tous les contacts
 Voir un contact particulier
 Editer un contact
 Recherche google
 Envoi d’un SMS
 Afficher photos
 Voir une page Web
 Géolocalisation par coordonnées longitudes et latitude
 Lancer Music Player
 Ecouter chanson
 Paramètres système
 Volume Horaire :
 Cours : 1.5 heure
2
Imene Sghaier-Développement d'Applications Mobiles Natives
LA GESTION DES ÉVÈNEMENTS
 Deux moyens pour gérer les évènements:
 Créer un auditeur d'événements (classe qui implémente
une interface connue) et l'enregistrer auprès du composant
en question
 les View sont elles mêmes auditrices de certains
événements : (touché de l'écran par exemple). Il suffit donc
de spécialiser la méthode adaptée et la lancer lorsque
l'événement survient. Ces interfaces sont des interfaces
internes à la classe View et de nom OnXXXListener, donc
des interfaces de nom View.OnXXXListener. Cela
nécessite d'implémenter une méthode de nom onXXX( ).
On enregistre un auditeur par
setOnXXXListener(View.OnXXXListener).
Ceci permettra d'écrire directement la gestion de certains
événements qui peuvent se produire dans la View
3
Imene Sghaier-Développement d'Applications Mobiles Natives
LA GESTION DES ÉVÈNEMENTS
 La première méthode consiste à faire implémenter un
listener à notre classe, ce qui veut dire que notre classe
sera une classe à l'écoute des actions qu'on effectuera sur
les vues. A chaque fois qu'on effectuera une action, une
méthode qui correspond à cette action sera appelée, et on
définira dans cette méthode ce qu'il faut faire une fois
l'action effectuée
 Il existe déjà plusieurs interfaces prédéfinies, une pour
chaque type d'actions, nous allons voir uniquement le clic
normal pour l'instant.
 L'interface utilisée s'appelle View.OnClickListener et
nous oblige à définir la méthode void onClick (View vue).
 C'est dans cette méthode qu'on définira la conduite à
adopter en cas de clic. L'argument de type View est la
vue sur laquelle le clic a été effectué. 4
Imene Sghaier-Développement d'Applications Mobiles Natives
LA GESTION DES ÉVÈNEMENTS
Il existe d'autres interfaces avec d'autres méthodes à implémenter
 View.OnLongClickListener pour les longs clics, avec la méthode :
 boolean onLongClick(View vue)
 elle doit retourner true une fois que l'action associée a été effectuée.
 View.OnKeyListener pour gérer l'appui de touches avec la
méthode :
 boolean onKey (View vue, int codeTouche, KeyEvent inforEvent)
 Cette méthode doit retourner true une fois que l'action associée a été
effectuée.
 View.OnTouchListener correspond à une simple touche qui
s'effectue sur l'élément. On observe une touche au moment d'un
clique puis au moment du relâchement. Rester appuyé après un clic
est toujours une touche, même si on sort de l'élément. On y associe la
méthode :
 boolean onTouch (View vue, MotionEvent inforEvent)
 Cette méthode doit retourner true une fois que l'action associée a été
effectuée.
5
Imene Sghaier-Développement d'Applications Mobiles Natives
LA GESTION DES ÉVÉNEMENTS
6
private OnClickListener lAuditeurDuBouton = new OnClickListener() {
public void onClick(View v) {
// code lancé lorsque le bouton est cliqué
}
};
protected void onCreate(Bundle savedValues) {
...
// Récupération du Button à partir de l'IHM en XML
Button button = (Button)findViewById(R.id.leBeauBouton);
// Enregistrer l'auditeur auprès du bouton
button.setOnClickListener(lAuditeurDuBouton);
...
}
Exemple: Créer un auditeur d'événements
Imene Sghaier-Développement d'Applications Mobiles Natives

Recommandé

Les intents sous Android
Les intents sous Android Les intents sous Android
Les intents sous Android Houssem Lahiani
 
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
 
Les vues (views) sous android
Les vues (views) sous androidLes vues (views) sous android
Les vues (views) sous androidHoussem Lahiani
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Farouk Mezghich
 
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
 

Contenu connexe

Similaire à Chapitre 5 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'AndroidHoussem Lahiani
 
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.Mathias Seguy
 
Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineIdean France
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Paris Android User Group
 
Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Bruno Delb
 
Création d’applications et découverte d’Android
Création d’applications et découverte d’AndroidCréation d’applications et découverte d’Android
Création d’applications et découverte d’AndroidENSAM Casablanca
 
Présentation pratique de l'outil Mention
Présentation pratique de l'outil MentionPrésentation pratique de l'outil Mention
Présentation pratique de l'outil MentionElBachirSENE
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menusLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Saber LAJILI
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Sabeur LAJILI
 
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Les ateliers android_1_vers2015
Les ateliers android_1_vers2015Sabeur LAJILI
 

Similaire à Chapitre 5 android (20)

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
 
Les Activités.pdf
Les Activités.pdfLes Activités.pdf
Les Activités.pdf
 
My droid
My droidMy droid
My droid
 
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.
 
Poo
PooPoo
Poo
 
Cours 1 Android
Cours 1 AndroidCours 1 Android
Cours 1 Android
 
cour-DOM-Partie6.pdf
cour-DOM-Partie6.pdfcour-DOM-Partie6.pdf
cour-DOM-Partie6.pdf
 
Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas Fontaine
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014
 
Détection des mobiles
Détection des mobilesDétection des mobiles
Détection des mobiles
 
Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)Android Lab Test : L'installation d'une application en Java (français)
Android Lab Test : L'installation d'une application en Java (français)
 
Les Widgets
Les WidgetsLes Widgets
Les Widgets
 
Création d’applications et découverte d’Android
Création d’applications et découverte d’AndroidCréation d’applications et découverte d’Android
Création d’applications et découverte d’Android
 
Présentation pratique de l'outil Mention
Présentation pratique de l'outil MentionPrésentation pratique de l'outil Mention
Présentation pratique de l'outil Mention
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android introvf
Android introvfAndroid introvf
Android introvf
 
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
 

Plus de Institut Supérieur des Etudes Technologiques de Nabeul (8)

Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
chap 0 POO.pptx
chap 0 POO.pptxchap 0 POO.pptx
chap 0 POO.pptx
 
Chapitre 4 sem
Chapitre 4 semChapitre 4 sem
Chapitre 4 sem
 
Chapitre 3 sem
Chapitre 3 semChapitre 3 sem
Chapitre 3 sem
 
Chapitre 1 sem
Chapitre 1 semChapitre 1 sem
Chapitre 1 sem
 
Chapitre 5 sem
Chapitre 5 semChapitre 5 sem
Chapitre 5 sem
 
Chapitre 6 sem
Chapitre 6 semChapitre 6 sem
Chapitre 6 sem
 
Chapitre 4 Linux
Chapitre 4 LinuxChapitre 4 Linux
Chapitre 4 Linux
 

Chapitre 5 android

  • 1. LALA GESTIONGESTION DESDES ÉVÉNEMENTSÉVÉNEMENTS ETET LESLES INTENTSINTENTS 2017-2018 © Imene Sghaier ISET NabeulISET Nabeul SEM2 & Mastère SEM1SEM2 & Mastère SEM1
  • 2. OBJECTIFS ET ÉLÉMENTS DE CONTENU  Objectifs spécifiques  S’initier au control et gestion des évènement et à la notion d’intent implicite et explicite  Se familiariser avec le control d’évènements et la navigation entre activités et applications  Eléments de contenu  La gestion des évènements  Les intents  L’enchainement des écrans avec des intents explicites  Les intents implicites  Actions  Méthodes d’invocations d’intents  Appel Téléphonique  Envoi de mails  Voir tous les contacts  Voir un contact particulier  Editer un contact  Recherche google  Envoi d’un SMS  Afficher photos  Voir une page Web  Géolocalisation par coordonnées longitudes et latitude  Lancer Music Player  Ecouter chanson  Paramètres système  Volume Horaire :  Cours : 1.5 heure 2 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 3. LA GESTION DES ÉVÈNEMENTS  Deux moyens pour gérer les évènements:  Créer un auditeur d'événements (classe qui implémente une interface connue) et l'enregistrer auprès du composant en question  les View sont elles mêmes auditrices de certains événements : (touché de l'écran par exemple). Il suffit donc de spécialiser la méthode adaptée et la lancer lorsque l'événement survient. Ces interfaces sont des interfaces internes à la classe View et de nom OnXXXListener, donc des interfaces de nom View.OnXXXListener. Cela nécessite d'implémenter une méthode de nom onXXX( ). On enregistre un auditeur par setOnXXXListener(View.OnXXXListener). Ceci permettra d'écrire directement la gestion de certains événements qui peuvent se produire dans la View 3 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 4. LA GESTION DES ÉVÈNEMENTS  La première méthode consiste à faire implémenter un listener à notre classe, ce qui veut dire que notre classe sera une classe à l'écoute des actions qu'on effectuera sur les vues. A chaque fois qu'on effectuera une action, une méthode qui correspond à cette action sera appelée, et on définira dans cette méthode ce qu'il faut faire une fois l'action effectuée  Il existe déjà plusieurs interfaces prédéfinies, une pour chaque type d'actions, nous allons voir uniquement le clic normal pour l'instant.  L'interface utilisée s'appelle View.OnClickListener et nous oblige à définir la méthode void onClick (View vue).  C'est dans cette méthode qu'on définira la conduite à adopter en cas de clic. L'argument de type View est la vue sur laquelle le clic a été effectué. 4 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 5. LA GESTION DES ÉVÈNEMENTS Il existe d'autres interfaces avec d'autres méthodes à implémenter  View.OnLongClickListener pour les longs clics, avec la méthode :  boolean onLongClick(View vue)  elle doit retourner true une fois que l'action associée a été effectuée.  View.OnKeyListener pour gérer l'appui de touches avec la méthode :  boolean onKey (View vue, int codeTouche, KeyEvent inforEvent)  Cette méthode doit retourner true une fois que l'action associée a été effectuée.  View.OnTouchListener correspond à une simple touche qui s'effectue sur l'élément. On observe une touche au moment d'un clique puis au moment du relâchement. Rester appuyé après un clic est toujours une touche, même si on sort de l'élément. On y associe la méthode :  boolean onTouch (View vue, MotionEvent inforEvent)  Cette méthode doit retourner true une fois que l'action associée a été effectuée. 5 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 6. LA GESTION DES ÉVÉNEMENTS 6 private OnClickListener lAuditeurDuBouton = new OnClickListener() { public void onClick(View v) { // code lancé lorsque le bouton est cliqué } }; protected void onCreate(Bundle savedValues) { ... // Récupération du Button à partir de l'IHM en XML Button button = (Button)findViewById(R.id.leBeauBouton); // Enregistrer l'auditeur auprès du bouton button.setOnClickListener(lAuditeurDuBouton); ... } Exemple: Créer un auditeur d'événements Imene Sghaier-Développement d'Applications Mobiles Natives
  • 7. 7 public class Main extends Activity implements View.OnTouchListener, View.OnClickListener { Button b = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.boutton); b.setOnTouchListener(this); b.setOnClickListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { /* réagir au toucher */ return true; } @Override public void onClick(View v) { /* réagir au clic */ } } LA GESTION DES ÉVÉNEMENTS Exemple: Créer un auditeur d'événements Imene Sghaier-Développement d'Applications Mobiles Natives
  • 8. LA GESTION DES ÉVÉNEMENTS 8 public void onClick(View v) { switch(v.getId()) { //Si l'identifiant de la vue est celui du premier bouton case R.id.bouton1: /* agir pour bouton 1 */ break; //Si l'identifiant de la vue est celui du second boutoncase R.id.bouton2: /* agir pour bouton 2 */ break; /* etc. */ }}  si on a plusieurs boutons et qu'ils doivent effectuer des actions différentes, on peut par exemple passer par un switch pour savoir comment réagir en fonction du bouton: Imene Sghaier-Développement d'Applications Mobiles Natives
  • 9. 9 public class Main extends Activity{ private OnClickListener clickListenerBoutons = new OnClickListener(){ @Override public void onClick(View v) { /* réagir au clic pour les boutons 1 et 2*/}}; private OnTouchListener touchListenerBouton1 = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /* réagir au toucher pour le bouton 1*/ return false;}}; private OnTouchListener touchListenerBouton3 = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { /* réagir au toucher pour le bouton 3*/ return false;}}; Button b = null; Button b2 = null; Button b3 = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b = (Button) findViewById(R.id.boutton); b.setOnTouchListener(touchListenerBouton1); b.setOnClickListener(clickListenerBoutons); b2.setOnClickListener(clickListenerBoutons); b3.setOnTouchListener(touchListenerBouton3); }} LA GESTION DES ÉVÉNEMENTS Imene Sghaier-Développement d'Applications Mobiles Natives
  • 10. LA GESTION DES ÉVÉNEMENTS  On peut indiquer dans le fichier .xml de description d'IHM, la méthode qui sera lancée sous une certaine action sur un composant graphique  Par exemple, l'attribut android:onClick d'un composant graphique indique le nom de la méthode qui sera lancée si on clique sur cette View  Par exemple, dans le fichier de description de l'IHM, on écrit  Dans l'activité chargeant l'IHM contenant ce Button, on pourra écrire : 10 <Button android:id="@+id/push" ... android:onClick="onClickEmpiler"> </Button> public void onClickEmpiler(View v){ // traitement lancé lorsque l'utilisateur clique sur le Button d'id push } Imene Sghaier-Développement d'Applications Mobiles Natives
  • 11. PLAN DU CHAPITRE  La gestion des évènements  LesLes intentsintents  L’enchainement des écrans avec des intents explicites  Les intents implicites  Actions  Méthodes d’invocations d’intents  Appel Téléphonique  Envoi de mails  Voir tous les contacts  Voir un contact particulier  Editer un contact  Recherche google  Envoi d’un SMS  Afficher photos  Voir une page Web  Géolocalisation par coordonnées longitudes et latitude  Lancer Music Player  Ecouter chanson  Paramètres système 11 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 12. LES INTENTS  Un intent est une "intention" à faire quelque chose contenant des informations destinées à un composant Android. C'est un message asynchrone.  Les activités, services et récepteurs d'informations utilisent les Intents pour communiquer entre eux.  La navigation entre les écrans peut se faire de deux façons différentes : soit explicitement, soit implicitement. Dans les deux cas, l’ordre de changement d’activité est véhiculé par un objet de type Intent .  Un Intent ne contient pas obligatoirement explicitement le composant qui va le gérer. Dans ce cas c'est un Intent implicite.  Si l'Intent indique explicitement la classe du composant qui va le gérer c'est un Intent explicite  Un événement est une sous classe de android.content.Intent 12 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 13. LES INTENTS  Les Intents permettent de gérer l'envoi et la réception de messages afin de faire coopérer les applications.  Le but des Intents est de déléguer une action à un autre composant, une autre application ou une autre activité de l'application courante.  Un objet Intent contient les information (champs) suivantes:  le nom du composant ciblé (facultatif)  l'action à réaliser, sous forme de chaine de caractères  les données: contenu MIME et URI  des données supplémentaires (extra) sous forme de paires clè/valeur  une catégorie pour cibler un type d'application  des drapeaux (informations supplémentaires) 13 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 14. LES INTENTS  La façon dont sont renseignés ces champs détermine la nature ainsi que les objectifs de l'intent.  Ainsi, pour qu'un intent soit dit « explicite », il suffit que son champ composant soit renseigné. Ce champ permet de définir le destinataire de l'intent, celui qui devra le gérer.  Ce champ est constitué de deux informations : le package où se situe le composant, ainsi que le nom du composant. Ainsi, quand l'intent sera exécuté, Android pourra retrouver le composant de destination de manière précise. 14 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 15. PLAN DU CHAPITRE  La gestion des évènements  Les intents  L’enchainement des écrans avec desL’enchainement des écrans avec des intentsintents explicitesexplicites  Les intents implicites  Actions  Méthodes d’invocations d’intents  Appel Téléphonique  Envoi de mails  Voir tous les contacts  Voir un contact particulier  Editer un contact  Recherche google  Envoi d’un SMS  Afficher photos  Voir une page Web  Géolocalisation par coordonnées longitudes et latitude  Lancer Music Player  Ecouter chanson  Paramètres système 15 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 16. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  En fait cet Intent est envoyé à l'environnement d'exécution. Celui ci le redirige vers l'activité concernée 16 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 17. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Pour passer d'une activité courante à une nouvelle activité, il faut écrire le code :  Et il faut bien évidement déclarer la nouvelle activité (le futur écran) dans le fichier manifest  public void startActivity (Intent intent) est une méthode de la classe Activity permettant de lancer une autre Activity (qui affichera un nouvel écran). 17 Intent i = new Intent(getApplicationContext(), NouvelleActivity.class); startActivity(i); Imene Sghaier-Développement d'Applications Mobiles Natives
  • 18. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Si on ne s’attend pas à ce que la nouvelle activité nous renvoie un résultat, alors on peut l'appeler  void startActivity (Intent intent) (elle va commencer par un onCreate)  Si on veut un résultat en retour de la nouvelle activity on utilisera la méthode  void startActivityForResult(Intent intent, int requestCode)  requestCode un code passé qui permet d'identifier de manière unique un intent. 18 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 19. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Quand l'activité appelée s'arrêtera, la première méthode de callback appelée dans l'activité précédente sera void onActivityResult(int requestCd, int resultCd, Intent data)  On retrouve requestCd, qui sera le même code que celui passé dans le startActivityForResult et qui permet de repérer quel intent a provoqué l'appel de l'activité dont le cycle vient de s'interrompre.  resultCd est quant à lui un code renvoyé par l'activité qui indique comment elle s'est terminée  typiquement Activity.RESULT_OK si l'activité s'est terminée normalement, ou  Activity.RESULT_CANCELED s'il y a eu un problème ou qu'aucun code de retour n'a été précisé).  Enfin, data est un intent qui contient des données. 19 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 20. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Le premier argument du constructeur de l'Intent doit être le Context de l’application. Si l'appel est fait dans une activity MonActivity, this est souvent utilisé et convient car Activity dérive de Context  On utilise souvent MonActivity.this quand on est dans un listener d'événement. Mais, la méthode getApplicationContext() est la plus pratique et la plus sûre.  Les intents ont un champ « extra » qui leur permet de contenir des données à véhiculer entre les applications.  Un extra est en fait une clé à laquelle on associe une valeur.  Pour insérer un extra, il suffit d'utiliser la méthode Intent putExtra(String key, X val) 20 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 21. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Les Intent servent d'enveloppes pour passer des informations d'une Activity à une autre. On utilise pour cela la m éthode  Exemple 21 public Intent putExtra(String nomDeLExtra, unType valeur) Intent i = new Intent(leContexte, envoyerFormulaire.class); i.putExtra("name", nom); i.putExtra("firstName", prenom); startActivity(i); Imene Sghaier-Développement d'Applications Mobiles Natives
  • 22. L’ENCHAINEMENT DES ECRANS AVEC DES INTENTS EXPLICITES  Dans une Activity, on récupére l'Intent qui a lancé l'Activity par getIntent(). On peut alors récupérer tous les extras de l'Intent par getExtras(), et, par la suite, un extra associé à une entrée par : getTypeEntrée(nomEntrée, valeurParDefaut),  valeurParDefaut est la valeur retournée si il n'y a pas d'extra associé à nomEntrée dans l'Intent  On récupère l'information de la manière suivante: 22 Bundle extras = getIntent().getExtras(); String nom = new String(extras.getString("name" ,null)); Ou String nom =getIntent().getExtras().getString("name"); Imene Sghaier-Développement d'Applications Mobiles Natives
  • 23. PLAN DU CHAPITRE  La gestion des évènements  Les intents  L’enchainement des écrans avec des intents explicites  LesLes intentsintents implicitesimplicites  Actions  Méthodes d’invocations d’intents  Appel Téléphonique  Envoi de mails  Voir tous les contacts  Voir un contact particulier  Editer un contact  Recherche google  Envoi d’un SMS  Afficher photos  Voir une page Web  Géolocalisation par coordonnées longitudes et latitude  Lancer Music Player  Ecouter chanson  Paramètres système 23 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 24. LES INTENTS IMPLICITES  À l'opposé des intents explicites se trouvent les intents implicites  Les intents implicites sont utilisés pour envoyer une requête à un destinataire, sans savoir qui il est  S'il s'agit de passer la main à une autre application, on donne au constructeur de l'Intent les données et l'URI (uniform ressource identifier) cible: l'OS est chargé de trouver une application pouvant répondre à l'Intent.  Ainsi, les applications destinataires sont soit fournies par Android, soit par d'autres applications téléchargées sur le Play Store par exemple.  Dans ce cas, on ne connaît pas de manière précise pour spécifier le destinataire de l'intent, c'est pourquoi on va s'appliquer à renseigner d'autres champs pour laisser Android déterminer qui est capable de réceptionner cet intent.  Il faut au moins fournir deux informations essentielles :  Une action : ce qu'on désire que le destinataire fasse.  Un ensemble de données : sur quelles données le destinataire doit effectuer son action. 24 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 25. LES INTENTS IMPLICITES  Il existe aussi d'autres informations, pas forcément obligatoires, mais qui ont aussi leur utilité propre le moment venu :  La catégorie : permet d'apporter des informations supplémentaires sur l'action à exécuter et le type de composant qui devra gérer l'intent.  Le type : pour indiquer quel est le type des données incluses. Normalement ce type est contenu dans les données, mais en précisant cet attribut vous pouvez désactiver cette vérification automatique et imposer un type particulier.  Les extras : pour ajouter du contenu à vos intents afin de les faire circuler entre les composants.  Les flags : permettent de modifier le comportement de l'intent. 25 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 26. LES INTENTS IMPLICITES  L’action d’un intent implicite est une chaîne de caractères qui symbolise le traitement à déclencher.  De nombreuses constantes sont définies dans le SDK pour les actions nativement disponibles comme:  Intent.ACTION_WEB_SEARCH pour demander de réaliser une recherche sur Internet  Intent.ACTION_CALL pour passer un appel téléphonique.  La catégorie, quant à elle, apporte une classification à l’action.  La catégorie Intent.CATEGORY_LAUNCHER positionne l’activité comme étant exécutable, cette catégorie est utilisée de pair avec l’action Intent.ACTION_MAIN.  Android positionne les activités de cette catégorie dans le lanceur d’applications.  La catégorie CATEGORY_HOME marque l’activité à afficher au démarrage du téléphone. 26 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 27. LES INTENTS IMPLICITES  Les données détaillent l’action de l’Intent dont elles dépendent directement.  Elles peuvent être d’ailleurs nulles, certaines actions n’appelant pas forcément à devoir être précisées.  Par exemple pour l’action ACTION_CALL, la donnée sera le numéro de téléphone à composer.  La donné est couplée avec un autre attribut qui est le type MIME de la donnée à traiter. 27 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 28. LES INTENTS IMPLICITES  Les données sont formatées à l'aide des URI (uniform ressource identifier)  Un URI est une chaîne de caractères qui permet d'identifier un endroit. Par exemple sur internet, ou dans le cas d'Android sur le périphérique ou une ressource.  Afin d'étudier les URI, on va faire l'analogie avec les adresses URL qui nous permettent d'accéder à des sites internet. En effet, un peu à la manière d'un serveur, nos fournisseurs de contenu vont répondre en fonction de l'URI fournie. De plus, la forme générale d'une URI rappelle fortement les URL.  Prenons l'exemple du site de ISETN avec une URL inventée : http://www.isetn.rnu.tn/acceuil/actualités.html  On identifie plusieurs parties :  http://  www.isetn.rnu.tn  /acceuil/actualités.html 28 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 29. LES INTENTS IMPLICITES  La syntaxe d'un URI peut être analysée de la manière suivante (les parties entre accolades {} sont optionnelles) : <schéma><schéma> :: <information><information> {{ ?? <requête><requête> }} {{ ## <fragment><fragment> }}  Le schéma décrit quelle est la nature de l'information.  S'il s'agit d'un numéro de téléphone, alors le schéma sera tel, s'il s'agit d'un site internet, alors le schéma sera http, etc.  L'information est la donnée en tant que telle. Cette information respecte elle aussi une syntaxe, mais qui dépend du schéma cette fois-ci.  Ainsi, pour un numéro de téléphone, on peut nous contenter d'insérer le numéro tel:0606060606, mais pour des coordonnées GPS il faudra séparer la latitude de la longitude à l'aide d'une virgule geo:123.456789,-12.345678.  Pour un site internet, il s'agit d'un chemin hiérarchique. 29 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 30. LES INTENTS IMPLICITES  Pour créer un objet URI, c'est simple, il suffit d'utiliser la méthode statique  Par exemple, pour envoyer un SMS à une personne, on utilisera l'URI :  On peut aussi indiquer plusieurs destinataires et un corps pour ce message : 30 Uri Uri.parse(String uri); Uri sms = Uri.parse("sms:0606060606"); Uri.parse("sms:0606060606,0606060607?body=Salut%20lesamies"); Imene Sghaier-Développement d'Applications Mobiles Natives
  • 31. LES INTENTS IMPLICITES  Le MIME est un identifiant pour les formats de fichier.  Par exemple,  type MIME text. Si une donnée est accompagnée du type MIME text, alors les données sont du texte.  On trouve aussi audioet video par exemple. Il est ensuite possible de préciser un sous-type afin d'affiner les informations sur les données, par exemple audio/mp3 et audio/wav sont deux types MIME qui indiquent que les données sont sonores, mais aussi de quelle manière elles sont encodées.  Les types MIME que nous venons de voir son standards, c'est-à-dire qu'il y a une organisation qui les a reconnus comme étant légitimes.  Mais si on veut créer ses propres types MIME, il existe une petite syntaxe à respecter pour les types personnalisés [https://fr.wikipedia.org/wiki/Type_MIME] 31 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 32. LES INTENTS IMPLICITES- ACTIONS  Liste des actions standard que les intentions peuvent utiliser pour les activités de lancement (généralement par le biais startActivity (intention). 32  ACTION_MAIN  ACTION_VIEW  ACTION_ATTACH_DATA  ACTION_EDIT  ACTION_PICK  ACTION_CHOOSER  ACTION_GET_CONTENT  ACTION DIAL  ACTION_ANSWER  ACTION_INSERT  ACTION_DELETE  ACTION_RUN  ACTION_SYNC  ACTION_PICK_ACTIVITY  ACTION_SEARCH  ACTION WEB SEARCH  ACTION_ACTION_CALL  ACTION_SEND  ACTION_SENDTO  ACTION_WEB_ACTION_FACT ORY_TEST http://developer.android.com/reference/android/content/Intent.html Imene Sghaier-Développement d'Applications Mobiles Natives
  • 33. LES INTENTS IMPLICITES- MÉTHODES D’INVOCATION D’INTENTS 33 Méthodes Fonctionnalités startActivity(intent) Lance une activity sendBroadcast(intent) Envoie l’intend à n’importe quel composant BraodcastReceiver interessé startService(intent) ou binService(intent,…) Communique avec un service en arrière plan Imene Sghaier-Développement d'Applications Mobiles Natives
  • 34.  Pour passer d'une activité courante à une nouvelle activité, il faut écrire le code :  Il ne faut pas oublier d’ajouter les permissions nécessaire au fichier manifest.xml <uses-permission android:name="android.permission.CALL_PHONE" > </uses-permission> INTENTS IMPLICITES-APPEL TELPHONIQUE 34 Button b = (Button)findViewById(R.id.Button01); b.setOnClickListener(new OnClickListener() { public void onClick(View v) {Uri telnumber = Uri.parse("tel:0248484000");Intent call = new Intent(Intent.ACTION_DIAL, telnumber); startActivity(call); } }); Imene Sghaier-Développement d'Applications Mobiles Natives
  • 35. LES INTENTS IMPLICITES- ENVOI DE MAILS Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); String[] recipients = new String[]{"my@email.com", "",}; emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, recipients); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Test"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message"); emailIntent.setType("text/plain"); startActivity(Intent.createChooser(emailIntent, "Send mail...")); finish(); 35 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 36. LES INTENTS IMPLICITES- VOIR TOUS LES CONTACTS String myData = "content://contacts/people/"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2); 36 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 37. LES INTENTS IMPLICITES- VOIR UN CONTACT PARTICULIER String myData = "content://contacts/people/2"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2); //Ceci affiche le contact numéro 2 dans le repertoire 37 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 38. LES INTENTS IMPLICITES- EDITER UN CONTACT String myData = "content://contacts/people/2"; Intent myActivity2 = new Intent(Intent.ACTION_EDIT, Uri.parse(myData)); startActivity(myActivity2); //Ceci permet d’éditer le contact numéro 2 38 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 39. LES INTENTS IMPLICITES- RECHERCHE GOOGLE Intent intent = new Intent (Intent.ACTION_WEB_SEARCH ); intent.putExtra(SearchManager.QUERY, "papillons"); startActivity(intent); //Ceci lance une recherche google à propos des papillons 39 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 40. LES INTENTS IMPLICITES- ENVOI D’UN SMS Intent intent = new Intent( Intent.ACTION_SENDTO, Uri.parse("sms:21314151")); intent.putExtra("sms_body", "Vous allez à la réunion?"); startActivity(intent); //Ceci envoie un SMS « Vous allez à la réunion? » au //numéro 21314151 40 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 41. LES INTENTS IMPLICITES- AFFICHER PHOTOS Intent myIntent = new Intent(); myIntent.setType("image/pictures/*"); myIntent.setAction(Intent.ACTION_GET_CONTENT); startActivity(myIntent); //On pourra bien évidement choisir un autre //repertoire 41 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 42. <uses-permission android:name="android.permission.INTERNET " > </uses-permission> LES INTENTS IMPLICITES- VOIR UNE PAGE WEB String myData = "http://www.youTube.com"; Intent myActivity2 = new Intent(Intent.ACTION_VIEW, Uri.parse(myData)); startActivity(myActivity2);  Il ne faut pas oublier d’ajouter les permissions nécessaires dans le fichier manifeste : 42 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 43. <uses-permission android:name=" android.permission.ACCESS_COARSE_LOCATION " > </uses-permission> LES INTENTS IMPLICITES- GEOLOCALISATION PAR COORDONNÉES LONGITUDE ET LATITUDE String geoCode ="geo:41.5020952,-81.6789717"; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(geoCode)); startActivity(intent); 43 • Il ne faut pas oublier d’ajouter les permissions nécessaires dans le fichier manifeste : Imene Sghaier-Développement d'Applications Mobiles Natives
  • 44. LES INTENTS IMPLICITES- LANCER MUSIC PLAYER Intent i = new Intent("android.intent.action.MUSIC_PLAYER"); startActivity(i); 44 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 45. LES INTENTS IMPLICITES- ECOUTER CHANSON SUR CARTE SD Intent i=new Intent(android.content.Intent.ACTION_VIEW); Uri data = Uri.parse("file:///sdcard/tiratata.mp3"); String type = "audio/mp3"; i.setDataAndType(data, type); startActivity(i); 45 Imene Sghaier-Développement d'Applications Mobiles Natives
  • 46. LES INTENTS IMPLICITES- PARAMETRES SYSTEME Intent i=new Intent(android.provider.Settings.ACTION_SETTINGS); startActivity(intent); 46 Imene Sghaier-Développement d'Applications Mobiles Natives