Programmation Mobile Android Master CCI

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "Programmation Mobile Android Master CCI"

Transcription

1 Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Bertrand Estellon (AMU) Android Master CCI March 23, / 266

2 Introduction Organisation de l UE Objectifs du cours : Faire un petit tour du framework Android ; Apprendre à organiser une application ; Apprendre à utiliser une documentation ; Progresser en Java Limites du cours : Le cours est essentiellement basé sur des exemples pratiques et ne présente pas toutes les fonctionnalités d Android ; Vous devrez donc chercher dans la documentation afin de trouver les informations nécessaires à la réalisation de certaines parties des TP Evaluation : Seuls les TP seront évalués aux cours des séances ; Il est important de venir à tous les TP ; Les notes sont individuelles ; Vous devez donc travailler seul Bertrand Estellon (AMU) Android Master CCI March 23, / 266

3 Introduction Android SDK On peut développer sur Android sous Linux, Windows et MacOS avec : un plugin pour Eclipse ; Android-Studio Ces deux solutions utilisent le SDK d Android qui contient : Les librairies Java d Android ; Des outils de développement ; un émulateur pour tester vos applications ; des images du système Android Bertrand Estellon (AMU) Android Master CCI March 23, / 266

4 Introduction Android SDK L Android SDK peut être téléchargé sur le site dédié aux développeurs Il n est pas nécessaire de télécharger le SDK séparément si vous vous utilisez Android Studio Bertrand Estellon (AMU) Android Master CCI March 23, / 266

5 Introduction Android SDK Vous pouvez exécuter le Android SDK Manager, en lançant l exécutable android qui se trouve dans le répertoire tools du SDK : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

6 Introduction AVD Manager Pour tester un programme sur votre ordinateur, il sera également nécessaire de créer une machine virtuelle à l aide de l AVD Manager : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

7 Introduction Émulateur L émulateur vous permet de tester votre application : Les ROM Intel permettent de bénéficier de l accélération matérielle Bertrand Estellon (AMU) Android Master CCI March 23, / 266

8 Introduction Android Studio Pour installer Android Studio : Télécharger le logiciel via le site d Android ; Extraire l archive dans un répertoire ; Exécuter le fichier studiosh du répertoire bin ; À son premier démarrage, Android Studio : télécharge le sdk ; va vous proposer de configurer une machine virtuelle Bertrand Estellon (AMU) Android Master CCI March 23, / 266

9 Introduction Android Studio Bertrand Estellon (AMU) Android Master CCI March 23, / 266

10 Introduction Android SDK et Eclipse En TP, nous allons utiliser Android Studio : Il est installé dans mon répertoire personnel ; Il reste à configurer le lien vers le SDK d Android ; Il n est pas possible d installer de nouveaux packages Bertrand Estellon (AMU) Android Master CCI March 23, / 266

11 Introduction Création d une application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

12 Introduction Création d une application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

13 Introduction Création d une application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

14 Introduction Création d une application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

15 Introduction Structure d une application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

16 Introduction App manifest <?xml version="10" encoding="utf-8"?> <manifest xmlns:android=" package="comccicalculator" > <application android:allowbackup="true" > <activity android:name="mainactivity" > <intent-filter> <action android:name="androidintentactionmain" /> <category android:name="androidintentcategorylauncher" /> </intent-filter> </activity> </application> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

17 Introduction Les composants d une application Une application peut être composée : d activités : interface de l application ; de services : tâches en arrière-plan de l application ; de fournisseurs de contenu : accès à/partage de données structurées ; de widgets : intégrable dans d autres applications (écran d accueil) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

18 Interfaces Activités Activité public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); RelativeLayout layout = new RelativeLayout(this); TextView text = new TextView(this); textsettext("hello World!"); layoutaddview(text); setcontentview(layout); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

19 Interfaces Activités Déclaration de l activité dans le manifest <?xml version="10" encoding="utf-8"?> <manifest xmlns:android=" package="comccicalculator" > <application android:allowbackup="true" > <activity android:name="mainactivity" > <intent-filter> <action android:name="androidintentactionmain" /> <category android:name="androidintentcategorylauncher" /> </intent-filter> </activity> </application> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

20 Interfaces Activités Activité Bertrand Estellon (AMU) Android Master CCI March 23, / 266

21 Interfaces Activités Cycle de vie d une activité Généralités sur le cycle de vie d une activité : Aucune méthode main dans un programme Android Android exécute le code d une activité en appelant des callbacks ; Ces callbacks correspondent aux phrases de la vie d une activité ; Il n est pas nécessaire d implémenter toutes les callbacks ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

22 Interfaces Activités Cycle de vie pyramidal (Work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 25 Attribution License) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

23 Interfaces Activités Les états d une activité Les trois états durables d une activité : Resumed : L activité est au premier plan et l utilisateur peut interagir avec elle On dit aussi qu elle est en train d être exécutée Paused : L activité est partiellement recouverte par une autre activité qui se trouve au premier plan L activité en pause ne peut pas recevoir d action de l utilisateur Stopped : L activité est totalement cachée et ne peut plus exécutée de code En revanche, toutes ses informations sont conservées Les deux états transitoires d une activité : Created : L activité vient d être créée Started : L activité vient de devenir visible Bertrand Estellon (AMU) Android Master CCI March 23, / 266

24 Interfaces Activités Cycle de vie des activités public class ExampleActivity extends Activity public void oncreate(bundle savedinstancestate) { /* protected void onstart() { /* protected void onresume() { /* protected void onpause() { / * protected void onstop() { /* protected void ondestroy() { /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

25 Interfaces Activités Cycle de vie des activités (Work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 25 Attribution License) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

26 Interfaces Activités Pourquoi implémenter ces méthodes? Cela est important afin que votre application fonctionne correctement : Réception d une appel et basculement sur une autre application ; Ne pas consommer trop de ressources système ; Ne pas avoir de problème lors de la création/restauration de l application par le système (lors d une rotation de l écran par exemple) Remarque : avant de distribuer une application, Il est donc important d avoir fait des tests dans les situations évoquées ci-dessus Bertrand Estellon (AMU) Android Master CCI March 23, / 266

27 Interfaces Activités Mise en pause et reprise de l activité public class MainActivity extends Activity protected void onresume() { superonresume(); protected void onpause() { superonpause(); realeasecamera(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

28 Interfaces Activités Sauvegarde de l état de l application L application est détruite dans les états rouges : (Work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 25 Attribution License) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

29 Interfaces Activités Sauvegarde de l état de l application public class MainActivity extends Activity { private int value = 0; private Button protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); LinearLayout layout = new LinearLayout(this); button = new Button(this); buttonsetonclicklistener(new OnClickListener()); updatebuttonlabel(); layoutaddview(button); setcontentview(layout); /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

30 Interfaces Activités Sauvegarde de l état de l application public class MainActivity extends Activity { /* */ public void updatebuttonlabel() { buttonsettext(""+value); private class OnClickListener implements ViewOnClickListener public void onclick(view v) { value++; updatebuttonlabel(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

31 Interfaces Activités Sauvegarde de l état de l application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

32 Interfaces Activités Sauvegarde de l état de l application (Work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 25 Attribution License) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

33 Interfaces Activités Sauvegarde de l état de l application public class MainActivity extends Activity { /* protected void onrestoreinstancestate(bundle savedinstancestate) { superonrestoreinstancestate(savedinstancestate); value = savedinstancestategetint("value"); protected void onsaveinstancestate(bundle outstate) { superonsaveinstancestate(outstate); outstateputint("value", value); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

34 Interfaces Activités Les Bundles Les Bundles peuvent associer des chaînes de caractères à des : des types simples (entiers, flottants, caractères, etc) ; des chaînes de caractères ; des tableaux et des listes ; des objets Parcelable Quelques remarques : Un objet Parcelable peuvent être écrit dans un objet Parcel ; Une instance de Parcel est un conteneur pour un message ; Un Bundle est Parcelable Bertrand Estellon (AMU) Android Master CCI March 23, / 266

35 Interfaces Activités Les Bundles Quelques méthodes de la classe Bundle : putint(string key, int value) ; int getint(string key) ; putdouble(string key, double value) ; double getdouble(string key) ; putstring(string key, String value) ; String getstring(string key) ; putstringarraylist(string key, ArrayList<String> list) ; ArrayList<String> getstringarraylist(string key) ; putchararray(string key, char[] array) ; char[] getchararray(string key) ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

36 Interfaces Vues Les vues La structure d une interface avec l utilisateur : Les interfaces sont composées d objets étendant View et ViewGroup ; Une vue se dessine et permet les interactions avec l utilisateur ; Un groupe de vues contient d autres vues ; Un groupe de vues organise l affichage des vues qu il contient ; Un groupe de vues est une vue Android fournit une collection de vues et de groupes de vues qui offrent : les principales entrées (textes, champs de texte, listes, etc) ; différents modèles d organisation (linéaire, etc) Une classe est associée à chaque type de vue ou groupe de vue Bertrand Estellon (AMU) Android Master CCI March 23, / 266

37 Interfaces Vues Les vues La structure d une interface avec l utilisateur : Les interfaces sont composées d objets étendant View et ViewGroup ; Une vue se dessine et permet les interactions avec l utilisateur ; Un groupe de vues contient d autres vues ; Un groupe de vues organise l affichage des vues qu il contient ; Un groupe de vues est une vue Android fournit une collection de vues et de groupes de vues qui offrent : les principales entrées (textes, champs de texte, listes, etc) ; différents modèles d organisation (linéaire, etc) Une classe est associée à chaque type de vue ou groupe de vue Bertrand Estellon (AMU) Android Master CCI March 23, / 266

38 Interfaces Vues Les vues Bertrand Estellon (AMU) Android Master CCI March 23, / 266

39 Interfaces Vues Construction d une vue en Java public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); RelativeLayout relativelayout = createrelativelayout(); setcontentview(relativelayout); private RelativeLayout createrelativelayout() { RelativeLayout relativelayout = new RelativeLayout(this); relativelayoutsetpadding(16, 16, 16, 16); relativelayoutaddview(createverticallayout()); return relativelayout; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

40 Interfaces Vues Construction d une vue en Java public class MainActivity extends Activity { private LinearLayout createverticallayout() { LinearLayout verticallayout = new LinearLayout(this); verticallayoutsetorientation(linearlayoutvertical); verticallayoutsetlayoutparams( new RelativeLayoutLayoutParams( ViewGroupLayoutParamsMATCH_PARENT, ViewGroupLayoutParamsMATCH_PARENT) ); verticallayoutaddview(createtextview()); verticallayoutaddview(createhorizontallayout()); return verticallayout; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

41 Interfaces Vues Construction d une vue en Java public class MainActivity extends Activity { private TextView createtextview() { TextView textview = new TextView(this); textviewsetlayoutparams(new LinearLayoutLayoutParams( ViewGroupLayoutParamsMATCH_PARENT, 0, 10f)); textviewsetgravity(gravitycenter); textviewsettextsize(50); textviewsettext("textview"); return textview; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

42 Interfaces Vues Construction d une vue en Java public class MainActivity extends Activity { private LinearLayout createhorizontallayout() { LinearLayout horizontallayout = new LinearLayout(this); horizontallayoutsetorientation(linearlayouthorizontal); horizontallayoutsetlayoutparams( new LinearLayoutLayoutParams( ViewGroupLayoutParamsMATCH_PARENT, 0, 10f)); horizontallayoutaddview(createbutton()); horizontallayoutaddview(createbutton()); return horizontallayout; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

43 Interfaces Vues Construction d une vue en Java public class MainActivity extends Activity { private Button createbutton() { Button button = new Button(this); buttonsetlayoutparams(new LinearLayoutLayoutParams( 0, ViewGroupLayoutParamsMATCH_PARENT, 10f)); buttonsettext("button"); return button; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

44 Interfaces Vues Les évènements On ajoute des Listeners aux vues pour écouter les évènements : public class MainActivity extends Activity { public int count = protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); Button button =new Button(this); buttonsetonclicklistener(new MyOnClickListener(this)); setcontentview(button); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

45 Interfaces Vues Les évènements La méthode setonclicklistener prend en paramètre un objet qui implémente l interface ViewOnClickListener : public interface OnClickListener { void onclick(view view); De façon générale : Une interface est associée à chaque type d évènements ; On observe les évènements en connectant des listeners ; Pour cela, on utilise les méthodes seton*listener ; Ensuite, un évènement entraîne l appel d une méthode de l interface sur l objet que vous avez connecté à la vue Bertrand Estellon (AMU) Android Master CCI March 23, / 266

46 Interfaces Vues Les évènements Implémentation avec une classe classique : class MyOnClickListener implements ViewOnClickListener { private MainActivity mainactivity; public MyOnClickListener(MainActivity mainactivity) { thismainactivity = public void onclick(view v) { mainactivitycount++; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

47 Interfaces Vues Les évènements Utilisation d une classe interne : public class MainActivity extends Activity { public int count = protected void oncreate(bundle savedinstancestate) { /* */ buttonsetonclicklistener(new MyOnClickListener()); /* */ class MyOnClickListener implements ViewOnClickListener public void onclick(view v) { count++; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

48 Interfaces Vues Les évènements Utilisation d une classe anonyme : public class MainActivity extends Activity { public int count = protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); Button button =new Button(this); buttonsetonclicklistener(new ViewOnClickListener() public void onclick(view v) { count++; ); setcontentview(button); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

49 Interfaces Vues Les évènements En Java 8 (pas encore supporté par le framework Android) : public class MainActivity extends Activity { public int count = protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); Button button =new Button(this); buttonsetonclicklistener(v->count++); setcontentview(button); L utilisation des lambda-expressions simplifiera la gestion des évènements Bertrand Estellon (AMU) Android Master CCI March 23, / 266

50 Interfaces Les ressources Ressources Les ressources permettent : d externaliser : les images ; les chaînes de caractères ; les modèles d interfaces utilisateur ; les animations de fournir des ressources différentes en fonction de la configuration : taille de l écran ; orientation de l écran ; langue de maintenir ces éléments sans connaître Java Bertrand Estellon (AMU) Android Master CCI March 23, / 266

51 Interfaces Ressources Les ressources Les ressources : sont dans le répertoire res ; sont organisées dans des répertoires ; contiennent des images, fichiers XML ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

52 Interfaces Ressources Les ressources Le framework Android génère et maintient à jour automatiquement une classe R contenant les identifiants (valeur entière) des ressources ; Ils permettent de désigner les ressources dans le code Java ; Par exemple, le fichier activity_mainxml a comme identifiant Rlayoutactivity_main : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

53 Interfaces Ressources Les layouts La méthode setcontentview peut prendre également l identifiant d un layout : public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); Un layout est une ressource au format XML Bertrand Estellon (AMU) Android Master CCI March 23, / 266

54 Interfaces Ressources Les layouts Le contenu du fichier activity_mainxml : <RelativeLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="100dp" android:text="hello World!" /> </RelativeLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

55 Interfaces Ressources Les chaînes de caractères Pour faciliter la traduction des applications, il est préférable d utiliser des références à des chaînes de caractères dans les programmes ou les layouts : <RelativeLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

56 Interfaces Ressources Les chaînes de caractères Les chaînes de caractères se trouvent dans le fichier stringsxml : <?xml version="10" encoding="utf-8"?> <resources> <string name="hello_world">hello world!</string> </resources> Pour accéder à la chaîne de caractères : en XML ; en Java : getresources()gettext(rstringhello_world) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

57 Interfaces Ressources Les chaînes de caractères public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); RelativeLayout layout = new RelativeLayout(this); TextView text = new TextView(this); Context context = this; textsettext(rstringhello_world); /* String helloworld = contextgetresources()gettext(rstringhello_world); textsettext(helloworld); */ layoutaddview(text); setcontentview(layout); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

58 Interfaces Ressources Les références Syntaxe pour désigner une ressource dans un document XML où : <package_name> est le nom du paquet ; <resource_type> est le type de la ressource ; <resource_name> est le nom du fichier qui contient la ressource (sans l extension) ou la valeur de l attribut android:name d un élément XML (pour les valeurs simples) <ImageView /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

59 Interfaces Ressources Internationalisation Il est possible de définir des valeurs pour plusieurs langues : values/stringsxml contient le texte en anglais des chaînes ; values-fr/stringsxml contient le texte en français des chaînes ; values-ja/stringsxml contient le texte en japonais des chaînes ; Si title n est défini qu en français et en anglais et que l on fait référence à Rstringtitle, alors : Si le terminal n est pas configuré en français, Android charge le texte dans le fichier values/stringsxml ; Si le terminal est configué en français, Android charge le texte dans le fichier values-fr/stringsxml Bertrand Estellon (AMU) Android Master CCI March 23, / 266

60 Interfaces Ressources Les dimensions Pour faciliter la prise en charge des différentes tailles d écran, il est préférable d utiliser des références vers les dimensions : <RelativeLayout xmlns:android="" xmlns:tools=" android:layout_width="match_parent" android:layout_height="match_parent" </RelativeLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

61 Interfaces Ressources Les dimensions Les dimensions sont définies dans le fichier dimensxml : <resources> <dimen name="activity_horizontal_margin">16dp</dimen> <dimen name="activity_vertical_margin">16dp</dimen> </resources> Il est également possible d accéder aux dimensions en Java : float dimension = getresources()getdimension( Rdimenactivity_horizontal_margin); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

62 Interfaces Ressources Prise en charge des différentes configurations Il est possible de définir des ressources en fonction de l orientation du terminal, de la résolution, de la taille de l écran, de la version de l API, etc : values/dimensxml contient les dimensions par défaut ; values-w820dp/dimensxml contient les dimensions pour les écrans dont la largueur est supérieure à 820dp ; layout/activityxml contient la version par défaut d un layout ; layout-land/activityxml contient la version paysage de ce même layout Quelques remarques : Le système va aller chercher la bonne ressource automatiquement ; Cela est valable pour tous les types de ressources Bertrand Estellon (AMU) Android Master CCI March 23, / 266

63 Interfaces Ressources Les images Il est possible de stocker des images dans les ressources ; Les images peuvent être stockées sous différentes résolutions ; La résolution est choisie en fonction du terminal de l utilisateur Bertrand Estellon (AMU) Android Master CCI March 23, / 266

64 Interfaces Ressources Les images Avec un ic_launcherpng dans les sous-répertoires drawable-* : <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="count" /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

65 Interfaces Ressources Les images Une collection d icônes est proposée au téléchargement sur le site d Android ( Elle fournit les icônes standards à utiliser dans les barres d action Bertrand Estellon (AMU) Android Master CCI March 23, / 266

66 Interfaces Ressources Les images On désigne une image par son identifiant : public class MainActivity extends Activity { protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); getwindow()setbackgrounddrawableresource( Rdrawableic_launcher); ImageView image = (ImageView)findViewById(Ridimage); imagesetimageresource(rdrawableic_launcher); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

67 Interfaces Ressources Les images Il est également possible de définir un Drawable via un fichier XML : <?xml version="10" encoding="utf-8"?> <ripple xmlns:android="" android:color="?android:colorcontrolhighlight"> <item> <shape android:shape="oval"> <solid android:color="?android:coloraccent"/> </shape> </item> </ripple> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

68 Interfaces Ressources Les images Il est également possible de définir un Drawable qui change en fonction de l état de l élément sur lequel il est utilisé : <?xml version="10" encoding="utf-8"?> <selector xmlns:android=""> <item android:state_selected="true" <item </selector> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

69 Interfaces Les couleurs Ressources Contenu du fichier res/color/button_textxml : <selector xmlns:android=""> <item android:state_pressed="true" android:color="#ffff0000"/> <!-- pressed --> <item android:state_focused="true" android:color="#ff0000ff"/> <!-- focused --> <item android:color="#ff000000"/> <!-- default --> </selector> Exemple d utilisation : <Button android:layout_width="fill_parent" android:layout_height="wrap_content" /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

70 Interfaces Les animations Ressources <?xml version="10" encoding="utf-8"?> <selector xmlns:android=" <item android:state_pressed="true"> <objectanimator android:propertyname="translationz" android:valuetype="floattype"/> </item> <item> <objectanimator android:propertyname="translationz" android:valuetype="floattype"/> </item> </selector> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

71 Interfaces Ressources Les styles Définition d un style à partir d un autre style : <?xml version="10" encoding="utf-8"?> <resources> <style name="apptheme" parent="android:thememateriallightdarkactionbar"> <item </item> <item </item> <item </item> <!-- --> </style> </resources> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

72 Interfaces Les styles Ressources Utilisation du style dans le manifest de l application : <?xml version="10" encoding="utf-8"?> <manifest xmlns:android=" package="comuniv_amuccinotes" > <application android:allowbackup="true" > <activity android:name="mainactivity" > <intent-filter> <action android:name="androidintentactionmain" /> <category android:name="androidintentcategorylauncher" /> </intent-filter> </activity> </application> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

73 Interfaces Ressources Types de ressources Les différents types de ressources : Animations ; Couleurs ; Images (Drawable Resources) ; Layouts ; Menus ; Chaînes de caractères ; Styles ; Préférences ; etc Bertrand Estellon (AMU) Android Master CCI March 23, / 266

74 Interfaces Ressources Les identifiants Il est possible d associer des identifiants aux membres d un layout : <RelativeLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> Ensuite, l identifiant est accessible par Ridtext dans le code Java Bertrand Estellon (AMU) Android Master CCI March 23, / 266

75 Interfaces Ressources Les identifiants Accès à un élément d un layout dans une activité par son identifiant : public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); TextView text = (TextView)findViewById(Ridtext); textsettext(rstringhello_world); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

76 Interfaces Ressources Les boutons <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

77 Interfaces Ressources Les boutons public class MainActivity extends Activity { private TextView text; private int protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); count = 0; setcontentview(rlayoutactivity_main); text = (TextView)findViewById(Ridtext); Button button = (Button)findViewById(Ridbutton); textsettext(""+count); buttonsetonclicklistener(new MyOnClickListener()); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

78 Interfaces Ressources Les boutons Utilisation de l attribut onclick : <LinearLayout xmlns:android=" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="count" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

79 Interfaces Ressources Les boutons Définition de la méthode count dans la classe de l activité : public class MainActivity extends Activity { private TextView text; private int protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); count = 0; setcontentview(rlayoutactivity_main); text = (TextView)findViewById(Ridtext); textsettext(""+count); public void count(view view) { count++; textsettext(""+count); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

80 Interfaces Fragments Les fragments Un fragment : représente une portion d interface utilisateur ; peut être inséré dans une activité ; peut être utilisé dans plusieurs activités ; possède son propre cycle de vie, layout, etc ; Une activité : peut afficher plusieurs fragments ; peut utiliser une pile pour gérer la navigation entre fragments ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

81 Interfaces Fragments Une application avec deux fragments Bertrand Estellon (AMU) Android Master CCI March 23, / 266

82 Interfaces Fragments Premier layout : le formulaire Le layout correspondant au formulaire du premier écran : <LinearLayout xmlns:android=""> <EditText android:inputtype="number" /> <TextView /> <EditText android:inputtype="number" /> <Button /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

83 Interfaces Fragments Deuxième layout : le resultat <TextView xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textsize="100dp" android:text="+" /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

84 Interfaces Fragments Le layout de l activité principale Le layout de l activité principale : <FrameLayout xmlns:android="" xmlns:tools="" android:layout_width="match_parent" android:layout_height="match_parent" /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

85 Interfaces Fragments L activité principale Le code de l activité principale : public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); if (savedinstancestate == null) { getfragmentmanager()begintransaction() add(ridcontainer, new FormFragment()) commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

86 Interfaces Fragments La création de la vue dans le premier fragment Le code du premier fragment : public class FormFragment extends Fragment public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_form, container, false); return view; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

87 Interfaces Fragments Cycle de vie d un fragment (Work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 25 Attribution License) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

88 Interfaces Fragments Système de notification entre le fragment et l activité Le fragment FormFragment doit notifier l activité de la validation du formulaire lorsque l utilisateur clique sur le bouton ; Nous allons définir une interface pour rendre le fragment réutilisable : public interface FormFragmentListener { void onequals(double value1, double value2); L activité va implémenter cette interface ; Lors de l exécution de la méthode onattach du fragment, nous allons conserver une référence afin d être capable de notifier l activité Bertrand Estellon (AMU) Android Master CCI March 23, / 266

89 Interfaces Fragments Système de notification entre le fragment et l activité Nous conservons la référence de l activité : public class FormFragment extends Fragment { private FormFragmentListener public void onattach(activity activity) { superonattach(activity); try { listener = (FormFragmentListener)activity; catch (ClassCastException e) { throw new ClassCastException(activitytoString() + " must implement OnClickListener"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

90 Interfaces Fragments Système de notification entre le fragment et l activité Nous faisons en sorte d écouter les clics sur le bouton : public class FormFragment extends Fragment { private EditText edittext1, edittext2; private FormFragmentListener public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_form, container, false); edittext1 = (EditText)viewfindViewById(RideditText1); edittext2 = (EditText)viewfindViewById(RideditText2); Button button = (Button)viewfindViewById(Ridbutton); buttonsetonclicklistener(new OnClickListener()); return view; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

91 Interfaces Fragments Système de notification entre le fragment et l activité Nous notifions l activité si un clic se produit : public class FormFragment extends Fragment { private EditText edittext1, edittext2; private FormFragmentListener listener; private class OnClickListener implements ViewOnClickListener public void onclick(view v) { double value1 = DoubleparseDouble(editText1getText()toString()); double value2 = DoubleparseDouble(editText2getText()toString()); listeneronequals(value1, value2); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

92 Interfaces Fragments Système de notification entre le fragment et l activité Réception de la notification par l activité : public class MainActivity extends Activity implements FormFragmentListener protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); if (savedinstancestate == null) { getfragmentmanager()begintransaction() add(ridcontainer, new FormFragment()) public void onequals(double value1, double value2) { /* TODO : afficher le résultat */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

93 Interfaces Fragments Le deuxième fragment Mise en place du layout du deuxième fragment : public class ResultFragment extends Fragment public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_result, container, false); TextView textview = (TextView)viewfindViewById(RidtextView); textviewsettext(""+value()); return view; public double value() { /* TODO */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

94 Interfaces Fragments Les paramètres d un fragment Les paramètres sont conservés même si le fragment est détruit : public class ResultFragment extends Fragment { public static ResultFragment getinstance(double value) { ResultFragment fragment = new ResultFragment(); Bundle bundle = new Bundle(); bundleputdouble("value", value); fragmentsetarguments(bundle); return fragment; public double value() { return getarguments()getdouble("value"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

95 Interfaces Fragments Affichage de deux fragments par l activité Affichage du deuxième fragment par l activité : public class ResultFragment extends Fragment implements FormFragmentListener public void onequals(double value1, double value2) { double value = value1+value2; getfragmentmanager()begintransaction() replace(ridcontainer, ResultFragmentgetInstance(value)) addtobackstack("result") commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

96 Interfaces Fragments Affichage de deux fragments par l activité Bertrand Estellon (AMU) Android Master CCI March 23, / 266

97 Interfaces Fragments Affichage de deux fragments par l activité Le layout de l activité par défaut : <?xml version="10" encoding="utf-8"?> <LinearLayout xmlns:android="" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="comuniv_amuccimyapplicationformfragment" android:layout_width="match_parent" android:layout_height="wrap_content"/> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/detailselementbackground" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

98 Interfaces Fragments Affichage de deux fragments par l activité Le layout de l activité en mode paysage (dans le répertoire layout-land) : <?xml version="10" encoding="utf-8"?> <LinearLayout xmlns:android="" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="comuniv_amuccimyapplicationformfragment" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" android:background="?android:attr/detailselementbackground" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

99 Interfaces Fragments Affichage de deux fragments par l activité Le code de l activité : public class MainActivity extends Activity implements FormFragmentListener protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); public void onequals(double value1, double value2) { double value = value1+value2; getfragmentmanager()begintransaction() replace(ridcontainer, ResultFragmentgetInstance(value)) addtobackstack("result") commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

100 Interfaces Fragments Les boites de dialogue Bertrand Estellon (AMU) Android Master CCI March 23, / 266

101 Interfaces Fragments Les boites de dialogue Les boites de dialogue sont des fragments particuliers : public class DialogFragment extends androidappdialogfragment { private EditText public Dialog oncreatedialog(bundle savedinstancestate) { AlertDialogBuilder builder = new AlertDialogBuilder(getActivity()); LayoutInflater inflater = getactivity()getlayoutinflater(); View view = inflaterinflate(rlayoutdialog, null); edittext = (EditText)viewfindViewById(RideditText); buildersetview(view) setpositivebutton(androidrstringok, new OnPositiveButtonClickListener()) setnegativebutton(androidrstringcancel, new MyOnNegativeButtonClickListener()); return buildercreate(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

102 Interfaces Les boites de dialogue Fragments Nous allons faire communiquer le fragment et l activité via l interface : public interface DialogFragmentListener { void onchangetext(string text); On redéfinit ensuite la méthode onattach : public class DialogFragment extends androidappdialogfragment { private DialogFragmentListener public void onattach(activity activity) { superonattach(activity); try { listener = (DialogFragmentListener)activity; catch (ClassCastException e) { throw new ClassCastException(activitytoString() + " must implement OnClickListener"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

103 Interfaces Fragments Les boites de dialogue On implémente ensuite les deux classes internes de façon à traiter correctement la validation et l annulation du formulaire : public class DialogFragment extends androidappdialogfragment { private class OnPositiveButtonClickListener implements DialogInterfaceOnClickListener public void onclick(dialoginterface dialog, int id) { listeneronchangetext(edittextgettext()tostring()); DialogFragmentthisgetDialog()dismiss(); private class MyOnNegativeButtonClickListener implements DialogInterfaceOnClickListener { public void onclick(dialoginterface dialog, int id) { DialogFragmentthisgetDialog()cancel(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

104 Interfaces Fragments Les boites de dialogue Code de l activité principale : public class MainActivity extends Activity implements DialogFragmentListener { private TextView protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); textview = (TextView)findViewById(RidtextView); textviewsetonclicklistener(new MyOnClickListener()); /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

105 Interfaces Fragments Les boites de dialogue Code de l activité principale : public class MainActivity extends Activity implements DialogFragmentListener { private TextView textview; /* public void onchangetext(string text) { textviewsettext(text); private class MyOnClickListener implements ViewOnClickListener public void onclick(view v) { DialogFragment newfragment = new DialogFragment(); newfragmentshow(getfragmentmanager(), "dialog"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

106 Interfaces Menus Les menus Code XML d un menu : <menu xmlns:android=""> <item android:showasaction="ifroom" /> <item android:showasaction="ifroom" /> </menu> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

107 Interfaces Menus Chargement du menu dans l activité Si le fichier contenant la définition du menu est menu/menu_mainxml alors : public class MainActivity extends Activity public boolean oncreateoptionsmenu(menu menu) { getmenuinflater()inflate(rmenumain, menu); return true; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

108 Interfaces Menus Traitement des actions du menu La méthode suivante permet de traiter les actions des menus : public class MainActivity extends Activity public boolean onoptionsitemselected(menuitem item) { switch (itemgetitemid()) { case Ridaction_decrement: decrement(); return true; case Ridaction_increment: increment(); return true; default: return superonoptionsitemselected(item); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

109 Interfaces Menus Traitement des actions du menu Les autres parties du code de l activité : public class MainActivity extends Activity { private TextView countertextview; private int counter = protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); countertextview = (TextView) findviewbyid(ridcounter); updatetextview(); private void updatetextview() { countertextviewsettext(""+counter); private void increment() { counter++; updatetextview(); private void decrement() { counter--; updatetextview(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

110 Interfaces Menus Sauvegarde de l état de l activité Les autres parties du code de l activité : public class MainActivity extends Activity protected void onsaveinstancestate(bundle outstate) { superonsaveinstancestate(outstate); outstateputint("counter", protected void onrestoreinstancestate(bundle savedinstancestate) { superonrestoreinstancestate(savedinstancestate); counter = savedinstancestategetint("counter"); updatetextview(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

111 Interfaces Menus Menus et fragments Les fragments peuvent ajouter des éléments dans les menus : <LinearLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <fragment android:name="counterfragment" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" /> <fragment android:name="colorfragment" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

112 Interfaces Menus et fragments Menus Création de la vue pour la classe CounterFragment : public class CounterFragment extends Fragment { private TextView countertextview; private int counter = public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_counter, container, false); countertextview = (TextView) viewfindviewbyid(ridcounter); updatetextview(); return view; private void updatetextview() { countertextviewsettext(""+counter); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

113 Interfaces Menus Menus et fragments Le code XML du menu : <menu xmlns:android=" <item android:showasaction="always" /> <item android:showasaction="always" /> </menu> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

114 Interfaces Menus Menus et fragments Mise en place du menu : public class CounterFragment extends Fragment { private TextView countertextview; private int counter = public void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); public void oncreateoptionsmenu(menu menu, MenuInflater inflater) { superoncreateoptionsmenu(menu, inflater); inflaterinflate(rmenumenu_counter, menu); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

115 Interfaces Menus et fragments Menus Traitement des événements du menu : public class CounterFragment extends Fragment public boolean onoptionsitemselected(menuitem item) { switch (itemgetitemid()) { case Ridaction_decrement: decrement(); return true; case Ridaction_increment: increment(); return true; default: return superonoptionsitemselected(item); private void increment() { counter++; updatetextview(); private void decrement() { counter--; updatetextview(); Tous les fragments peuvent recevoir les notifications ; Le premier qui retourne true arrête la propagation Bertrand Estellon (AMU) Android Master CCI March 23, / 266

116 Interfaces Menus et fragments Menus Création de la vue pour la classe ColorFragment : public class ColorFragment extends Fragment { private ImageView imageview; private int color = public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_color, container, false); imageview = (ImageView) viewfindviewbyid(ridcolor); updateimageview(); return view; private void updateimageview() { imageviewsetbackgroundcolor(color); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

117 Interfaces Menus Menus et fragments Le code XML du menu : <menu xmlns:android=" <item android:showasaction="always" /> <item android:showasaction="always" /> </menu> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

118 Interfaces Menus Menus et fragments Mise en place du menu : public class ColorFragment extends Fragment { private ImageView imageview; private int color = public void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); public void oncreateoptionsmenu(menu menu, MenuInflater inflater) { superoncreateoptionsmenu(menu, inflater); inflaterinflate(rmenumenu_color, menu); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

119 Interfaces Menus Menus et fragments Traitement des événements du menu : public class ColorFragment extends Fragment public boolean onoptionsitemselected(menuitem item) { switch (itemgetitemid()) { case Ridaction_red: changecolor(colorred); return true; case Ridaction_blue: changecolor(colorblue); return true; default: return superonoptionsitemselected(item); private void changecolor(int color) { thiscolor = color; updateimageview(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

120 Interfaces Listes Les listes Dans le cours et les TP, nous allons utiliser des RecyclerView : Il est également possible d utiliser l ancienne classe ListView Bertrand Estellon (AMU) Android Master CCI March 23, / 266

121 Interfaces Listes Les listes Les RecyclerViews permettent l affichage de grande quantité de données et sont efficaces (en construisant un petit nombre de vues) ; Les LayoutManagers permettent de gérer la position des éléments ; Les Adapters vont adapter les données aux vues RecyclerView LayoutManager Adapter Dataset Bertrand Estellon (AMU) Android Master CCI March 23, / 266

122 Interfaces Listes Le layout principal de l application Le layout de l activité principale : <androidsupportv7widgetrecyclerview xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" /> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

123 Interfaces Listes Mise en place de l activité principale public class MainActivity extends Activity { private ItemAdapter adapter; private ArrayList<String> protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); RecyclerView recyclerview = (RecyclerView)findViewById(RidrecyclerView); RecyclerViewLayoutManager layoutmanager = new GridLayoutManager(this,2); recyclerviewsetlayoutmanager(layoutmanager); dataset = new ArrayList<>(); adapter = new ItemAdapter(dataset); recyclerviewsetadapter(adapter); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

124 Interfaces Listes Code de l adaptateur public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { private final List<String> dataset; public ItemAdapter(List<String> dataset) { thisdataset = public ViewHolder oncreateviewholder(viewgroup group, int typeview) { View view = LayoutInflaterfrom(groupgetContext()) inflate(androidrlayoutsimple_list_item_1, group, false); ViewHolder viewholder = new ViewHolder(view); return viewholder; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

125 Interfaces Listes Code de l adaptateur public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { private final List<String> dataset; public class ViewHolder extends RecyclerViewViewHolder { final TextView textview; public ViewHolder(View itemview) { super(itemview); textview = (TextView)itemViewfindViewById(androidRidtext1); public void bind(int index) { textviewsettext(datasetget(index)); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

126 Interfaces Listes Code de l adaptateur public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> public void onbindviewholder(viewholder viewholder, int index) { public int getitemcount() { return datasetsize(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

127 Interfaces Listes Mise en place du dialogue d ajout d un item Le dialogue va communiquer avec l activité via l interface suivante : public interface DialogFragmentListener { void onadditem(string text); L activité va implémenter cette interface : public class MainActivity extends Activity implements DialogFragmentListener public void onadditem(string text) { /* TODO */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

128 Interfaces Listes Notification de l adaptateur de la modification du modèle Il faut notifier l adaptateur de tout changement des données du modèle : public class MainActivity extends Activity implements DialogFragmentListener { private ItemAdapter adapter; private ArrayList<String> public void onadditem(string text) { datasetadd(text); adapternotifydatasetchanged(); Remarque : Il est possible de notifier l adaptateur plus finement avec les méthodes notifyitemchanged, notifyiteminserted, notifyitemmoved, notifyitemrangechanged, etc Bertrand Estellon (AMU) Android Master CCI March 23, / 266

129 Interfaces Listes Ajout d un menu à l activité public class MainActivity extends Activity implements DialogFragmentListener public boolean oncreateoptionsmenu(menu menu) { getmenuinflater()inflate(rmenumenu_main, menu); return public boolean onoptionsitemselected(menuitem item) { if (itemgetitemid() == Ridaction_add) { DialogFragment newfragment = new DialogFragment(); newfragmentshow(getfragmentmanager(), "dialog"); return true; return superonoptionsitemselected(item); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

130 Interfaces Listes Code de la boite de dialogue Création de la vue : public class DialogFragment extends androidappdialogfragment { private EditText public Dialog oncreatedialog(bundle savedinstancestate) { AlertDialogBuilder builder = new AlertDialogBuilder(getActivity()); LayoutInflater inflater = getactivity()getlayoutinflater(); View view = inflaterinflate(rlayoutdialog, null); edittext = (EditText)viewfindViewById(RideditText); buildersetview(view) setpositivebutton(androidrstringok, new OnPositiveButtonClickListener()) setnegativebutton(androidrstringcancel, new MyOnNegativeButtonClickListener()); return buildercreate(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

131 Interfaces Listes Code de la boite de dialogue Code XML du layout de la boite de dialogue : <RelativeLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> </RelativeLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

132 Interfaces Listes Code de la boite de dialogue Connexion de la boite de dialogue et de l activité : public class DialogFragment extends androidappdialogfragment { private EditText edittext; private DialogFragmentListener public void onattach(activity activity) { superonattach(activity); try { listener = (DialogFragmentListener)activity; catch (ClassCastException e) { throw new ClassCastException(activitytoString() + " must implement OnClickListener"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

133 Interfaces Listes Code de la boite de dialogue Traitement des actions de la boite de dialogue : public class DialogFragment extends androidappdialogfragment { private class OnPositiveButtonClickListener implements DialogInterfaceOnClickListener public void onclick(dialoginterface dialog, int id) { listeneronadditem(edittextgettext()tostring()); DialogFragmentthisgetDialog()dismiss(); private class MyOnNegativeButtonClickListener implements DialogInterfaceOnClickListener { public void onclick(dialoginterface dialog, int id) { DialogFragmentthisgetDialog()cancel(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

134 Interfaces Listes Sélection des éléments Nous souhaitons pouvoir sélectionner les éléments de la liste : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

135 Interfaces Listes Sélection des éléments Notification de l activité lorsque l utilisateur clique sur un élément : public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { private List<OnItemClick> listeners = new ArrayList<>(); public interface OnItemClick { void onclick(int index); public void setonitemclick(onitemclick listener) { listenersadd(listener); public void notifyonitemclick(int index) { for (OnItemClick listener : listeners) listeneronclick(index); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

136 Interfaces Listes Sélection des éléments Notification de l activité lorsque l utilisateur clique sur un élément : public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { public class ViewHolder extends RecyclerViewViewHolder { int index; public ViewHolder(View itemview) { /* */ itemviewsetonclicklistener(new OnClickListener()); public void bind(int index) { thisindex = index; /* */ private class OnClickListener implements ViewOnClickListener public void onclick(view view) { notifyonitemclick(index); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

137 Interfaces Listes Sélection des éléments Réception des notifications par l activité : public class MainActivity extends Activity implements DialogFragmentListener { private ItemAdapter protected void oncreate(bundle savedinstancestate) { /* */ adapter = new ItemAdapter(dataset, selecteditems); adaptersetonitemclick(new OnItemClick()); private class OnItemClick implements ItemAdapterOnItemClick public void onclick(int index) { /* TODO */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

138 Interfaces Listes Sélection des éléments Méthodes pour gérer les sélections : public class MainActivity extends Activity implements DialogFragmentListener { private SparseBooleanArray selecteditems = new SparseBooleanArray(); private int numberofselecteditems; private void swapitemselection(int index) { selecteditemsput(index,!selecteditemsget(index)); adapternotifydatasetchanged(); numberofselecteditems += selecteditemsget(index)? 1 : -1; private void clearselection() { selecteditemsclear(); numberofselecteditems = 0; adapternotifydatasetchanged(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

139 Interfaces Listes Sélection des éléments Réception des notifications par l activité : public class MainActivity extends Activity implements DialogFragmentListener { private ItemAdapter protected void oncreate(bundle savedinstancestate) { /* */ adapter = new ItemAdapter(dataset, selecteditems); adaptersetonitemclick(new OnItemClick()); private class OnItemClick implements ItemAdapterOnItemClick public void onclick(int index) { swapitemselection(index); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

140 Interfaces Listes Sélection des éléments item_backgroundxml : <selector xmlns:android=""> <item android:state_selected="true" /> <item </selector> selected_item_backgroundxml : <ripple xmlns:android="" android:color="?android:colormultiselecthighlight"> <item /> </ripple> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

141 Interfaces Listes Sélection des éléments normal_item_backgroundxml : <ripple xmlns:android="" <item android:drawable="?android:colormultiselecthighlight"/> </ripple> layout_itemxml : <RelativeLayout xmlns:android="" android:layout_width="fill_parent" android:layout_height="fill_parent" <TextView android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

142 Interfaces Sélection des éléments Listes Communication des éléments sélectionnés à l adaptateur : public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { private final List<String> dataset; private final SparseBooleanArray selecteditems; public ItemAdapter(List<String> dataset, SparseBooleanArray selecteditems) { thisdataset = dataset; thisselecteditems = selecteditems; public class MainActivity extends Activity implements DialogFragmentListener protected void oncreate(bundle savedinstancestate) { /**/ adapter = new ItemAdapter(dataset, selecteditems); /**/ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

143 Interfaces Listes Sélection des éléments Mise en place du nouveau layout : public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> public ViewHolder oncreateviewholder(viewgroup viewgroup, int index) { View view = LayoutInflaterfrom(viewGroupgetContext()) inflate(rlayoutlayout_item, viewgroup, false); ViewHolder viewholder = new ViewHolder(view); viewholderbind(index); return viewholder; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

144 Interfaces Listes Sélection des éléments Modification de la vue en fonction de la sélection de l élément : public class ItemAdapter extends RecyclerViewAdapter<ItemAdapterViewHolder> { private final SparseBooleanArray selecteditems; public class ViewHolder extends RecyclerViewViewHolder { int index; public void bind(int index) { /* */ itemviewsetselected(selecteditemsget(index)); /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

145 Interfaces Listes Le mode action Nous souhaitons pouvoir supprimer les éléments sélectionnés : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

146 Interfaces Listes Le mode action Le menu du mode action : <menu xmlns:android=""> <item android:showasaction="ifroom" /> </menu> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

147 Interfaces Listes Le mode action Changement de mode à la suite d une sélection : public class MainActivity extends Activity implements DialogFragmentListener { private void swapitemselection(int index) { /* */ updateactionmode(); private void updateactionmode() { boolean oldselectionmodeactivated = actionmode!=null; boolean selectionmodeactivated = numberofselecteditems > 0; if (selectionmodeactivated==oldselectionmodeactivated) return; if (selectionmodeactivated) { actionmode = startactionmode(actionmodecallback); return; else actionmodefinish(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

148 Interfaces Listes Le mode action Création du menu du mode action : public class MainActivity extends Activity implements DialogFragmentListener { private ActionModeCallback actionmodecallback = new ActionModeCallback(); private class ActionModeCallback implements ActionModeCallback public boolean oncreateactionmode(actionmode mode, Menu menu) { MenuInflater inflater = modegetmenuinflater(); inflaterinflate(rmenumenu_actionmode, menu); return true; /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

149 Interfaces Le mode action Listes Gestion des événements du menu du mode action : public class MainActivity extends Activity implements DialogFragmentListener { private class ActionModeCallback implements ActionModeCallback { /* public boolean onactionitemclicked(actionmode mode, MenuItem item) { switch (itemgetitemid()) { case Ridaction_delete: deleteselecteditems(); return true; default: return false; /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

150 Interfaces Listes Le mode action Gestion de la destruction du mode action : public class MainActivity extends Activity implements DialogFragmentListener { private class ActionModeCallback implements ActionModeCallback { /* public boolean onprepareactionmode(actionmode mode, Menu menu) { return public void ondestroyactionmode(actionmode mode) { clearselection(); actionmode = null; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

151 Interfaces Listes Le mode action Suppression des éléments du modèle : public class MainActivity extends Activity implements DialogFragmentListener { private void deleteselecteditems() { for (int index = selecteditemssize()-1; index >= 0; index--) if (selecteditemsvalueat(index)) datasetremove(selecteditemskeyat(index)); clearselection(); updateactionmode(); adapternotifydatasetchanged(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

152 Persistance des données Préférences Exemple d utilisation des préférences Exemple d utilisation des préférences: Bertrand Estellon (AMU) Android Master CCI March 23, / 266

153 Persistance des données Préférences Exemple d utilisation des préférences Exemple d utilisation des préférences: Bertrand Estellon (AMU) Android Master CCI March 23, / 266

154 Persistance des données Préférences Exemple d utilisation des préférences Exemple d utilisation des préférences: Bertrand Estellon (AMU) Android Master CCI March 23, / 266

155 Persistance des données Préférences Structure des préférences Un fichier XML décrit la structure des péférences : <?xml version="10" encoding="utf-8"?> <PreferenceScreen xmlns:android=""> <CheckBoxPreference android:key="pref_checkbox" android:defaultvalue="true" /> <EditTextPreference android:key="pref_text" android:dependency="pref_checkbox" /> <ListPreference android:key="pref_list" /> </PreferenceScreen> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

156 Persistance des données Préférences Les tableaux de chaînes de caractères Les tableaux de valeurs pour la liste (fichier values/arraysxml) : <?xml version="10" encoding="utf-8"?> <resources> <string-array name="list_entries"> <item>value A</item> <item>value B</item> <item>value C</item> </string-array> <string-array name="list_values"> <item>a</item> <item>b</item> <item>c</item> </string-array> </resources> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

157 Persistance des données Préférences Création du Fragment Préférences Le code d un Fragment affichant les préférences : public class SettingsFragment extends PreferenceFragment public void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); addpreferencesfromresource(rxmlsettings); Les préférences sont automatiquement sauvegardées Bertrand Estellon (AMU) Android Master CCI March 23, / 266

158 Persistance des données Préférences Mise à jour du Fragment Mise en jour du Fragment en fonction des changements : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

159 Persistance des données Préférences Écouter les changements Mise en jour du Fragment en fonction des changements : public class SettingsFragment extends PreferenceFragment implements SharedPreferencesOnSharedPreferenceChangeListener public void onresume() { superonresume(); getpreferencescreen()getsharedpreferences() public void onpause() { superonpause(); getpreferencescreen()getsharedpreferences() unregisteronsharedpreferencechangelistener(this); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

160 Persistance des données Préférences Écouter les changements Implémentation de la méthode du Listener et mise à jour de la vue : public class SettingsFragment extends PreferenceFragment implements SharedPreferencesOnSharedPreferenceChangeListener public void onsharedpreferencechanged(sharedpreferences preferences, String key) { updatesummary(preferences, key); private void updatesummary(sharedpreferences preferences, String key) { if (keyequals("pref_text") keyequals("pref_list")) { Preference preference = findpreference(key); preferencesetsummary(preferencesgetstring(key, "")); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

161 Persistance des données Préférences Écouter les changements Mise à jour de la vue à la création : public class SettingsFragment extends PreferenceFragment implements SharedPreferencesOnSharedPreferenceChangeListener public void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); addpreferencesfromresource(rxmlsettings); SharedPreferences sharedpreferences = getpreferencescreen()getsharedpreferences(); updatesummary(sharedpreferences, "pref_text"); updatesummary(sharedpreferences, "pref_list"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

162 Persistance des données Écouter les changements Préférences Mise à jour de la vue à la création : public class MainFragment extends Fragment { private TextView public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_main, container, false textview = (TextView) viewfindviewbyid(ridtextview); SharedPreferences sharedpreferences = PreferenceManagergetDefaultSharedPreferences(getActivity()); updateviewwithsettings(sharedpreferences); return view; private void updateviewwithsettings(sharedpreferences sharedpreferences boolean checkboxvalue = sharedpreferencesgetboolean("pref_checkbox", String textvalue = sharedpreferencesgetstring("pref_text", ""); String listvalue = sharedpreferencesgetstring("pref_list", ""); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

163 Persistance des données Préférences Vue du fragment principal Création de la vue : public class MainFragment extends Fragment { private TextView public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_main, container, false); textview = (TextView) viewfindviewbyid(ridtextview); SharedPreferences sharedpreferences = PreferenceManagergetDefaultSharedPreferences(getActivity()); updateview(sharedpreferences); return view; private void updateview(sharedpreferences preferences) { /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

164 Persistance des données Préférences Récupération des préférences Récupération des valeurs des préférences : public class MainFragment extends Fragment { private TextView textview; private void updateview(sharedpreferences preferences) { boolean checkboxvalue = preferencesgetboolean("pref_checkbox", true); String textvalue = preferencesgetstring("pref_text", ""); String listvalue = preferencesgetstring("pref_list", ""); textviewsettext(checkboxvalue + "\n" + textvalue + "\n" + listvalue); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

165 Persistance des données Préférences Écoute des changements de préférences Écoute du changement de préférences : public class MainFragment extends Fragment implements SharedPreferencesOnSharedPreferenceChangeListener public void onresume() { superonresume(); PreferenceManagergetDefaultSharedPreferences(getActivity()) public void onpause() { PreferenceManagergetDefaultSharedPreferences(getActivity()) registeronsharedpreferencechangelistener(this); superonpause(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

166 Persistance des données Préférences Écoute des changements de préférences Modification de la vue lorsque les préférences changent : public class MainFragment extends Fragment implements SharedPreferencesOnSharedPreferenceChangeListener public void onsharedpreferencechanged(sharedpreferences preferences, String key) { updateview(preferences); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

167 Persistance des données Préférences Mise en place du menu Insertion du menu dans le Fragment principal : public class MainFragment extends Fragment implements SharedPreferencesOnSharedPreferenceChangeListener public void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); public void oncreateoptionsmenu(menu menu, MenuInflater inflater) { inflaterinflate(rmenumenu_main, menu); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

168 Persistance des données Préférences Mise en place du menu Code XML du menu : <menu xmlns:android=""> <item android:orderincategory="100" android:showasaction="always" /> </menu> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

169 Persistance des données Préférences L activité principale Création de la vue : public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); if (savedinstancestate == null) { getfragmentmanager()begintransaction() add(ridcontainer, new MainFragment()) commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

170 Persistance des données Préférences L activité principale Traitement des événements du menu : public class MainActivity extends Activity public boolean onoptionsitemselected(menuitem item) { if (itemgetitemid() == Ridaction_settings) { opensettings(); return true; return superonoptionsitemselected(item); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

171 Persistance des données Préférences L activité principale Ouverture du Fragment Préférences : public class MainActivity extends Activity { private void opensettings() { getfragmentmanager()begintransaction() replace(ridcontainer, new SettingsFragment()) addtobackstack("result") commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

172 Persistance des données Les fichiers Fichiers Deux espaces de stockage : Stockage interne : Toujours disponible Par défaut, accessible uniquement par votre application Fichiers Supprimés à la désinstallation de l application Sockage externe : Pas toujours disponible (USB, etc) Fichiers Accessibles et modifiables par tout le monde Seuls les fichiers du répertoire getexternalfilesdir() sont supprimés à la désinstallation de l application Nécessite des permissions Utile pour partager des données entre applications Bertrand Estellon (AMU) Android Master CCI March 23, / 266

173 Persistance des données Fichiers Créer un fichier dans le stockage interne Deux répertoires : getfilesdir() : Le répertoire interne de votre application ; getcachedir() : le cache interne de votre application Pour créer un fichier dans l un de ces répertoires : File file = new File(contextgetFilesDir(), "fichiertxt"); ou FileOutputStream outputstream = openfileoutput("fichiertxt", ContextMODE_PRIVATE); ou File file = FilecreateTempFile("fichier", "tmp", contextgetcachedir()); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

174 Persistance des données Fichiers Écrire et lire des données dans un fichier Nous souhaitons écrire un éditeur de fichier : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

175 Persistance des données Fichiers Écrire et lire des données dans un fichier Supposons que nous ayons l activité suivante : public class MainActivity extends Activity { private EditText protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); edittext = (EditText)findViewById(RideditText); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

176 Persistance des données Fichiers Écrire et lire des données dans un fichier Déclenchement de l écriture et de la lecture du fichier : public class MainActivity extends Activity { private EditText protected void onstart() { superonresume(); protected void onstop() { superonpause(); save(edittextgettext()tostring()); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

177 Persistance des données Fichiers Écrire et lire des données dans un fichier La sauvegarde : private void save(string string) { File file = new File(getFilesDir(), filename); try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) { writerwrite(string); catch (IOException e) { ToastmakeText(this, getstring(rstringread_error), ToastLENGTH_LONG); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

178 Persistance des données Fichiers Écrire et lire des données dans un fichier La lecture : private String load() { File file = new File(getFilesDir(), filename); if (!fileexists()) return ""; try (BufferedReader reader = new BufferedReader(new FileReader(file))) { return load(reader); catch (IOException e) { ToastmakeText(this, getstring(rstringread_error), ToastLENGTH_LONG); return ""; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

179 Persistance des données Fichiers Écrire et lire des données dans un fichier La lecture : private String load(bufferedreader reader) throws IOException { StringBuilder builder = new StringBuilder(); for(;;) { String line = readerreadline(); if (line==null) break; builderappend(line)append("\n"); return buildertostring(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

180 Persistance des données Fichiers Permissions pour le stockage externe Il suffit d ajouter les permissions dans le manifeste de l application : Pour l écriture : <manifest> <uses-permission android:name="androidpermissionwrite_external_storage" /> </manifest> Pour la lecture : <manifest> <uses-permission android:name="androidpermissionread_external_storage" /> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

181 Persistance des données Fichiers Un exemple d application Nous souhaitons parcourir et lire les fichiers du stockage externe : Deux types de fragments : Affichage d un répertoire : DirectoryFragment; Affichage du contenu d un fichier : FileFragment Bertrand Estellon (AMU) Android Master CCI March 23, / 266

182 Persistance des données Fichiers Un exemple d application Nous souhaitons parcourir et lire les fichiers du stockage externe : Deux types de fragments : Affichage d un répertoire : DirectoryFragment; Affichage du contenu d un fichier : FileFragment Bertrand Estellon (AMU) Android Master CCI March 23, / 266

183 Persistance des données Fichiers Affichage du contenu d un fichier Le layout : <FrameLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" </ScrollView> </FrameLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

184 Persistance des données Fichiers Affichage du contenu d un fichier Création de l instance et conservation du chemin : public class FileFragment extends Fragment { public static FileFragment newinstance(string filename) { FileFragment fragment = new FileFragment(); Bundle args = new Bundle(); argsputstring("path", filename); fragmentsetarguments(args); return fragment; private String path() { return getarguments()getstring("path"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

185 Persistance des données Fichiers Affichage du contenu d un fichier Création de la vue et gestion du cycle de vie : public class FileFragment extends Fragment { private TextView textview; public View oncreateview(layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) { View view = inflaterinflate(rlayoutfragment_file, container, false); textview = (TextView)viewfindViewById(RidtextView); return view; public void onresume() { superonresume(); textviewsettext(load()); getactivity()settitle(path()); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

186 Persistance des données Fichiers Affichage du contenu d un fichier Chargement du contenu du fichier : public class FileFragment extends Fragment { private String load() { File file = new File(path()); if (!fileexists()) return ""; try (BufferedReader reader = new BufferedReader(new FileReader(file))) { return load(reader); catch (IOException e) { ToastmakeText(thisgetActivity(), getstring(rstringread_error), ToastLENGTH_LONG); return ""; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

187 Persistance des données Fichiers Affichage du contenu d un fichier Chargement du contenu du fichier : public class FileFragment extends Fragment { private String load(bufferedreader reader) throws IOException { StringBuilder builder = new StringBuilder(); for(;;) { String line = readerreadline(); if (line==null) break; builderappend(line)append("\n"); return buildertostring(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

188 Persistance des données Fichiers Affichage du contenu d un répertoire Création de l instance : public class DirectoryFragment extends ListFragment { public static DirectoryFragment newinstance(string path) { DirectoryFragment fragment = new DirectoryFragment(); Bundle args = new Bundle(); argsputstring("path", path); fragmentsetarguments(args); return fragment; private String path() {return getarguments()getstring("path"); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

189 Persistance des données Fichiers Affichage du contenu d un répertoire Création de la vue et gestion du cycle de vie : public class DirectoryFragment extends ListFragment { private String[] files; void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); File directory = new File(path()); files = directorylist(); setlistadapter(new ArrayAdapter<>(getActivity(), androidrlayoutsimple_list_item_1, androidridtext1, files)); public void onresume() { superonresume(); getactivity()settitle(path()); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

190 Persistance des données Fichiers Affichage du contenu d un répertoire Mise en place des notifications de l activité : public class DirectoryFragment extends ListFragment { private OnDirectoryFragmentListener listener; public interface OnDirectoryFragmentListener { public void onchangepath(string path); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

191 Persistance des données Fichiers Affichage du contenu d un répertoire Mise en place des notifications de l activité : public class DirectoryFragment extends ListFragment { private OnDirectoryFragmentListener public void onattach(activity activity) { superonattach(activity); try { listener = (OnDirectoryFragmentListener) activity; catch (ClassCastException e) { throw new ClassCastException(activitytoString() + " must implement public void ondetach() { superondetach(); listener = null; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

192 Persistance des données Fichiers Affichage du contenu d un répertoire Mise en place des notifications de l activité : public class DirectoryFragment extends ListFragment { private OnDirectoryFragmentListener public void onlistitemclick(listview list, View view, int position, long id) { superonlistitemclick(list, view, position, id); if (null!= listener) { String path = path()equals("/")?"":path(); listeneronchangepath(path + "/" + files[position]); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

193 Persistance des données Fichiers L activité principale Création de le la vue : public class MainActivity extends Activity protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); if (savedinstancestate == null) { getfragmentmanager()begintransaction() add(ridcontainer, DirectoryFragmentnewInstance("/")) commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

194 Persistance des données Fichiers L activité principale Réception des notifications des fragments : public class MainActivity extends Activity implements DirectoryFragmentOnDirectoryFragmentListener public void onchangepath(string path) { File file = new File(path); Fragment fragment = (fileisdirectory())?directoryfragmentnewinstance(path) :FileFragmentnewInstance(path); getfragmentmanager()begintransaction() replace(ridcontainer, fragment) addtobackstack(path) commit(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

195 Persistance des données Fichiers Le format JSON JSON (JavaScript Oject Notation) est un format de données dérivé de la notation des objets et tableaux de ECMAScript (donc de JavaScript) : {"machin": { "taille": 12, "style": "gras", "bidule": { "machin": [ {"style" : "italique", {"style" : "gras" ] L avantage de JSON est qu il est reconnu nativement par JavaScript Bertrand Estellon (AMU) Android Master CCI March 23, / 266

196 Persistance des données Fichiers Le format JSON Les éléments en JSON : Les objets : {chaîne : valeur, chaîne : valeur Les tableaux : [valeur, valeur, ] Les valeurs : chaîne, nombre, objet, tableau, true, false, null Les chaînes : "abcdef" ou "abcd\n\t" Les nombres : {"unobjet": { "untableau": [12, 13, 53], "unnombre" : 53, "unchaîne" : "truc\n" "unobjet" : { "style" : "gras" Bertrand Estellon (AMU) Android Master CCI March 23, / 266

197 Persistance des données Fichiers Le format JSON Les éléments en JSON : Les objets : {chaîne : valeur, chaîne : valeur Les tableaux : [valeur, valeur, ] Les valeurs : chaîne, nombre, objet, tableau, true, false, null Les chaînes : "abcdef" ou "abcd\n\t" Les nombres : {"unobjet": { "untableau": [12, 13, 53], "unnombre" : 53, "unchaîne" : "truc\n" "unobjet" : { "style" : "gras" Bertrand Estellon (AMU) Android Master CCI March 23, / 266

198 Persistance des données Fichiers Le format JSON sous Android La gestion des objets est réalisée par la classe JSONObject : JSONObject put(string key, JSONObject object) ; JSONObject put(string key, JSONArray array) ; JSONObject put(string key, boolean int long double b) ; JSONObject getjsonobject(string key) ; JSONArray getjsonarray(string key) ; boolean getboolean(string key), ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

199 Persistance des données Fichiers Le format JSON sous Android La gestion des tableaux est réalisée par la classe JSONArray : JSONArray put([int index,] JSONObject object) ; JSONArray put([int index,] JSONArray array) ; JSONArray put([int index,] boolean int long double b) ; JSONObject getjsonobject(int index) ; JSONArray getjsonarray(int index) ; boolean getboolean(int index), ; int length() ; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

200 Persistance des données Fichiers Le format JSON sous Android Un objet JSON : {"array": [1, 2, 3], "boolean" : false Construction d une chaîne de caractères au format JSON en Java : String tojson() throws JSONException { JSONObject object = new JSONObject(); JSONArray array = new JSONArray(); arrayput(1)put(2)put(3); objectput("array", array); objectput("boolean", false); return objecttostring(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

201 Persistance des données Fichiers Le format JSON sous Android Un objet JSON : {"array": [1, 2, 3], "boolean" : false Construction d une chaîne de caractères au format JSON en Java : String tojson() throws JSONException { JSONObject object = new JSONObject(); JSONArray array = new JSONArray(); arrayput(1)put(2)put(3); objectput("array", array); objectput("boolean", false); return objecttostring(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

202 Persistance des données Fichiers Le format JSON sous Android Un objet JSON : {"array": [1, 2, 3], "boolean" : false Lecture d une chaîne de caractères au format JSON en Java : void readjson(string json) throws JSONException { JSONObject object = new JSONObject(json); JSONArray array = objectgetjsonarray("array"); for (int i = 0; i < arraylength(); i++) Logd("json", ""+arrayget(i)); Logd("json", ""+objectgetboolean("boolean")); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

203 Persistance des données Bases de données Bases de données SQLite Nous allons voir comment stocker de l information structurée sous la forme d une base de données SQLite Pour cela, nous allons : définir un modèle de données (les tables) ; représenter ce modèle sous la forme de classes ; définir un SQL Helper pour faciliter la création des tables ; voir comment modifier, consulter les données Bertrand Estellon (AMU) Android Master CCI March 23, / 266

204 Persistance des données Bases de données Définition du modèle Définition du modèle de données, c est-à-dire, les tables : public class DatabaseContract { public interface Articles extends BaseColumns { String tablename = "articles"; String columnguid = "guid"; String columnguidtype = "TEXT"; String columntitle = "title"; String columntitletype = "TEXT"; String columncontent = "content"; String columncontenttype = "TEXT"; Les autres types possibles : NULL, INTEGER, REAL et BLOB ; Il peut y avoir plusieurs tables Bertrand Estellon (AMU) Android Master CCI March 23, / 266

205 Persistance des données Bases de données Définition du SQLiteOpenHelper Construction des instructions SQL à partir de la définition du modèle : public class DatabaseOpenHelper extends SQLiteOpenHelper { private static final String SQLCreateTableArticles = "CREATE TABLE " + DatabaseContractArticlestableName + " (" + DatabaseContractArticles_ID + " INTEGER PRIMARY KEY," + DatabaseContractArticlescolumnGuid + " " + DatabaseContractArticlescolumnGuidType + ", " + DatabaseContractArticlescolumnTitle + " " + DatabaseContractArticlescolumnTitleType + ", " + DatabaseContractArticlescolumnContent + " " + DatabaseContractArticlescolumnContentType + " )"; private static final String SQLDeleteTableArticles = "DROP TABLE IF EXISTS " + DatabaseContractArticlestableName; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

206 Persistance des données Bases de données Définition du SQLiteOpenHelper Création de la base de données : public class DatabaseOpenHelper extends SQLiteOpenHelper { public static final int databaseversion = 1; public static final String databasename = "articlesdb"; public DatabaseOpenHelper(Context context) { super(context, databasename, null, public void oncreate(sqlitedatabase database) { databaseexecsql(sqlcreatetablearticles); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

207 Persistance des données Bases de données Définition du SQLiteOpenHelper Mise à jour de la base de données lors d un changement de version : public class DatabaseOpenHelper extends SQLiteOpenHelper { public static final int databaseversion = public void onupgrade(sqlitedatabase database, int oldversion, int newversion) { databaseexecsql(sqldeletetablearticles); public void ondowngrade(sqlitedatabase database, int oldversion, int newversion) { onupgrade(database, oldversion, newversion); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

208 Persistance des données Bases de données Utilisation du SQLiteOpenHelper Avant d utiliser le SQLiteOpenHelper, il faut l instancier : databaseopenhelper = new DatabaseOpenHelper(context); Insertion (INSERT INTO) : public void insert(article article) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); ContentValues values = new ContentValues(); valuesput(databasecontractarticlescolumnguid, articleguid); valuesput(databasecontractarticlescolumncontent, articlecontent); valuesput(databasecontractarticlescolumntitle, articletitle); databaseinsert(databasecontractarticlestablename, null, values); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

209 Persistance des données Bases de données Utilisation du SQLiteOpenHelper Mise en jour (UPDATE) : public void update(article article) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); ContentValues values = new ContentValues(); valuesput(databasecontractarticlescolumncontent, articlecontent); valuesput(databasecontractarticlescolumntitle, articletitle); String selection = DatabaseContractArticlescolumnGuid + " =?"; String[] selectionargs = {articleguid; databaseupdate(databasecontractarticlestablename, values, selection, selectionargs); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

210 Persistance des données Bases de données Utilisation du SQLiteOpenHelper Suppression DELETE : public void delete(string guid) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); String selection = DatabaseContractArticlescolumnGuid + " =?"; String[] selectionargs = {guid; databasedelete(databasecontractarticlestablename, selection, selectionargs); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

211 Persistance des données Bases de données Utilisation du SQLiteOpenHelper SELECT * FROM articles : public Cursor getarticles() { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); return databasequery(databasecontractarticlestablename, null, null, new String[]{, null, null, null); SELECT guild, title FROM articles WHERE title LIKE "%s%" : public Cursor getarticles(string s) { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); String selection = DatabaseContractArticlescolumnTitle + " LIKE?"; String[] selectionargs = {"%"+s+"%"; String[] columns = { DatabaseContractArticlescolumnGuid, DatabaseContractArticlescolumnTitle; return databasequery(databasecontractarticlestablename, columns, selection, selectionargs, null, null, null); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

212 Persistance des données Bases de données Les curseurs Les curseurs permettent de parcourir le résultat d une requête : int getcount(); boolean movetofirst(); boolean movetonext(); boolean movetoposition(int position); int getcolumnindex(string columnname); String getstring(int columnindex) double getdouble(int columnindex) void close(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

213 Persistance des données Bases de données Exemple d application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

214 Persistance des données Bases de données Les tables La structure de la base de données : public class DatabaseContract { public interface Items extends BaseColumns { String tablename = "items"; String columntext = "text"; String columntexttype = "TEXT"; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

215 Persistance des données Bases de données Le code de l activité principale En supposant que nous avons écrit le SQLiteOpenHelper : public class MainActivity extends Activity { private DatabaseOpenHelper databaseopenhelper; private ItemAdapter adapter; private EditText protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); databaseopenhelper = new DatabaseOpenHelper(this); setcontentview(rlayoutactivity_main); recyclerview = (RecyclerView)findViewById(RidrecyclerView); recyclerviewsetlayoutmanager(new LinearLayoutManager(this)); adapter = new ItemAdapter(getItems()); recyclerviewsetadapter(adapter); edittext = (EditText)findViewById(RideditText); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

216 Persistance des données Bases de données Le code de l activité principale Les méthodes qui interagissent avec la base de données : public class MainActivity extends Activity { private DatabaseOpenHelper databaseopenhelper; private Cursor getitems() { SQLiteDatabase database = databaseopenhelpergetreadabledatabase(); return databasequery(databasecontractitemstablename, null, null, new String[]{, null, null, null); private void insertitem(string text) { SQLiteDatabase database = databaseopenhelpergetwritabledatabase(); ContentValues values = new ContentValues(); valuesput(databasecontractitemscolumntext, text); databaseinsert(databasecontractitemstablename, null, values); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

217 Persistance des données Bases de données Le code de l activité principale Traitement des clics sur le bouton Ajouter : public class MainActivity extends Activity { private ItemAdapter adapter; private EditText edittext; public void onadditem(view view) { insertitem(edittextgettext()tostring()); adapterchangecursor(getitems()); edittextsettext(""); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

218 Persistance des données Bases de données Le code de l adaptateur Création des vues : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { private Cursor cursor; public ItemAdapter(Cursor cursor) { thiscursor = public ViewHolder oncreateviewholder(viewgroup parent, int viewtype) { View view = LayoutInflaterfrom(parentgetContext()) inflate(rlayoutitem, parent, false); ViewHolder viewholder = new ViewHolder(view); return viewholder; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

219 Persistance des données Bases de données Le code de l adaptateur Mise à jour des vues et nombre d éléments dans le curseur : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { private Cursor public void onbindviewholder(viewholder holder, int position) { cursormovetoposition(position); int index = cursorgetcolumnindex(databasecontractitemscolumntext); String text = cursorgetstring(index); public int getitemcount() { return cursorgetcount(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

220 Persistance des données Bases de données Le code de l adaptateur Changement de curseur : public class ItemAdapter extends RecyclerViewAdapter<ViewHolder> { private Cursor cursor; public void changecursor(cursor cursor) { thiscursorclose(); thiscursor = cursor; notifydatasetchanged(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

221 Persistance des données Bases de données Le code de ViewHolder public class ViewHolder extends RecyclerViewViewHolder { private final TextView textview; public ViewHolder(View itemview) { super(itemview); textview = (TextView)itemViewfindViewById(Ridtext); public void bind(string text) { textviewsettext(text); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

222 Programmation concurrente Les threads Quelques remarques générales : Les threads sont des fils d exécution ou tâches ; Les threads s exécutent (ou semblent s exécuter) en parallèle ; Les threads d un même processus partagent le même espace mémoire ; Par défaut, une application n utilise qu un thread principal ; Seul le thread principal peut modifier les vues de l interface ; Le thread principal gère la queue d événements Pourquoi créer des threads? Pour paralléliser des tâches (des calculs par exemple) ; Pour attendre la réponse d un serveur sans bloquer l application Pour ne jamais bloquer le thread principal Bertrand Estellon (AMU) Android Master CCI March 23, / 266

223 Programmation concurrente Un exemple Client Server Main Thread draw UI onclick Download Thread Connection Download UpdateView Notify UI draw UI Bertrand Estellon (AMU) Android Master CCI March 23, / 266

224 Programmation concurrente L interface Runnable et la classe Thread L interface Runnable : public interface Runnable { void run(); Implémentation de l interface pour définir la tâche à exécuter : public class DownloadTask implements Runnable { public void run() { /* TODO Download */ Création et exécution d un nouveau thread : public void onclick(view v) { Thread thread = new Thread(new DownloadTask()); threadstart(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

225 Programmation concurrente Synchronisation avec le thread principal Seul le thread principal peut modifier les vues de l interface : public class DownloadTask implements Runnable { private final ImageView imageview; public DownloadTask(ImageView imageview) { thisimageview = imageview; public void run() { Bitmap bitmap = loadimage(" /* INTERDIT : imageviewsetimagebitmap(bitmap); */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

226 Programmation concurrente Synchronisation avec le thread principal Réintégration dans le thread principal : public void run() { Bitmap bitmap = loadimage(" imageviewpost(new Runnable() { public void run() { imageviewsetimagebitmap(bitmap); ); Méthodes permettant d exécuter des tâches dans le thread principal : ActivityrunOnUiThread(Runnable) Viewpost(Runnable) ViewpostDelayed(Runnable, long) Bertrand Estellon (AMU) Android Master CCI March 23, / 266

227 Programmation concurrente La classe AsyncTask La classe AsyncTask permet de simplifier l écriture d un thread et sa synchronisation avec le thread principal : public class ImageDownloader extends AsyncTask<URL, Integer, Bitmap> { private ImageView view; public ImageDownloader(ImageView imageview) { thisview = protected Bitmap doinbackground(url urls) { return protected void onpostexecute(bitmap bitmap) { viewsetimagebitmap(bitmap); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

228 Programmation concurrente La classe AsyncTask Utilisation de la classe ImageDownloader : ImageDownloader imagedownloader = new ImageDownloader(imageView); imagedownloaderexecute(url); La classe AsyncTask contient d autres méthodes permettant de gérer la progression de l exécution de la tâche, son annulation, etc : void onpreexecute() void onprogressupdate(progress values) void publishprogress(progress values) void oncancelled(result result) boolean cancel(boolean mayinterruptifrunning) boolean iscancelled() Bertrand Estellon (AMU) Android Master CCI March 23, / 266

229 Programmation concurrente Exemple Connexion réseau Un exemple d application : Bertrand Estellon (AMU) Android Master CCI March 23, / 266

230 Programmation concurrente Exemple Connexion réseau Pour cela, nous devons : Ajouter une permission à l application Créer un thread Ouvrir une connexion Lire les données provenant d un flux Injecter les données téléchargées dans l application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

231 Programmation concurrente Exemple Connexion réseau Ajout des droits dans le manifeste de l application : <manifest xmlns:android="" package="comuniv_amucciimagedownloader" > <uses-permission android:name="androidpermissioninternet" /> <!-- --> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

232 Programmation concurrente Exemple Connexion réseau Création de la tâche permettant le téléchargement de l image : public class ImageDownloader extends AsyncTask<URL, Integer, Bitmap> { private ImageView imageview; public ImageDownloader(ImageView imageview) { thisimageview = protected Bitmap doinbackground(url urls) { URL url = urls[0]; try (InputStream stream = urlopenconnection()getinputstream()) { Bitmap bitmap = BitmapFactorydecodeStream(stream); return bitmap; catch (IOException e) { return null; Bertrand Estellon (AMU) Android Master CCI March 23, / 266

233 Programmation concurrente Exemple Connexion réseau Création de la tâche permettant le téléchargement de l image : public class ImageDownloader extends AsyncTask<URL, Integer, Bitmap> { private ImageView imageview; public ImageDownloader(ImageView imageview) { thisimageview = protected Bitmap doinbackground(url urls) { /* protected void onpostexecute(bitmap bitmap) { if (bitmap!=null) imageviewsetimagebitmap(bitmap); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

234 Programmation concurrente Exemple Connexion réseau L activité principale : public class MainActivity extends Activity { private ImageView imageview; private EditText protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); imageview = (ImageView)findViewById(RidimageView); urledittext = (EditText)findViewById(RidurlEditText); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

235 Programmation concurrente Exemple Connexion réseau L activité principale : public class MainActivity extends Activity { private ImageView imageview; private EditText urledittext; public void onclick(view view) { ImageDownloader imagedownloader = new ImageDownloader(imageView); try { URL url = new URL(urlEditTextgetText()toString()); imagedownloaderexecute(url); catch (MalformedURLException e) { ToastmakeText(this, getstring(rstringmalformed_url), ToastLENGTH_LONG)show(); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

236 Intentions Navigation entre applications Nous allons voir comment envoyer un utilisateur : vers une autre application : Carte, Contact, Appel vers une autre activité de votre application Pour cela, nous allons utiliser les intentions ou intents Dans un Intent, on précise : une action (voir, éditer, envoyer, etc) une donnée (souvent une Uri désignant une ressource) Nous verrons également comment répondre à certains intents Bertrand Estellon (AMU) Android Master CCI March 23, / 266

237 Intentions Construire un Intent Bertrand Estellon (AMU) Android Master CCI March 23, / 266

238 Intentions Construire un Intent <LinearLayout xmlns:android="" android:layout_width="match_parent" android:layout_height="match_parent" > <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputtype="phone" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onclick="call" /> </LinearLayout> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

239 Intentions Construire un Intent public class MainActivity extends Activity { private EditText protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); number = (EditText)findViewById(Ridnumber); public void call(view v) { Uri uri = Uriparse("tel:"+numbergetText()); Intent callintent = new Intent(IntentACTION_DIAL, uri); startactivity(callintent); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

240 Intentions Construire un Intent Bertrand Estellon (AMU) Android Master CCI March 23, / 266

241 Intentions Construire un Intent public class MainActivity extends Activity { private DatePicker datepicker; private TimePicker starttimepicker, protected void oncreate(bundle savedinstancestate) { superoncreate(savedinstancestate); setcontentview(rlayoutactivity_main); starttimepicker = (TimePicker)findViewById(RidstartTimePicker); endtimepicker = (TimePicker)findViewById(RidendTimePicker); datepicker = (DatePicker)findViewById(RiddatePicker); /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

242 Intentions Construire un Intent public class MainActivity extends Activity { private DatePicker datepicker; private TimePicker starttimepicker, endtimepicker; /* */ private long gettimeinmillis(timepicker timepicker) { int year = datepickergetyear(); int month = datepickergetmonth(); int day = datepickergetdayofmonth(); int hour = timepickergetcurrenthour(); int minute = timepickergetcurrentminute(); Calendar calendar = CalendargetInstance(); calendarset(year, month, day, hour, minute); return calendargettimeinmillis(); /* */ Bertrand Estellon (AMU) Android Master CCI March 23, / 266

243 Intentions Construire un Intent public class MainActivity extends Activity { private DatePicker datepicker; private TimePicker starttimepicker, endtimepicker; /* */ public void addevent(view view) { Intent calendarintent = new Intent(IntentACTION_INSERT, EventsCONTENT_URI); calendarintentputextra(calendarcontractextra_event_begin_time, gettimeinmillis(starttimepicker)); calendarintentputextra(calendarcontractextra_event_end_time, gettimeinmillis(endtimepicker)); startactivity(calendarintent); Bertrand Estellon (AMU) Android Master CCI March 23, / 266

244 Intentions Construire un Intent Dans la classe Intent, des actions sont définies : ACTION_CALL Initier un appel ACTION_EDIT Afficher et éditer des données ACTION_MAIN Démarrer une activité ACTION_SYNC Synchronizer des données avec un serveur ACTION_BATTERY_LOW Batterie faible ACTION_HEADSET_PLUG Écouteur branché ACTION_SCREEN_ON L écran s allume ACTION_TIMEZONE_CHANGED Changement de fuseau horaire Bertrand Estellon (AMU) Android Master CCI March 23, / 266

245 Intentions Navigation dans l application Une application peut contenir plusieurs activités : <?xml version="10" encoding="utf-8"?> <manifest xmlns:android=""> <application> <activity android:name="comexampletestmainactivity" > <! > </activity> <activity android:name="comexampletestotheractivity" > </activity> </application> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

246 Intentions Navigation dans l application Une application peut contenir plusieurs activités : <?xml version="10" encoding="utf-8"?> <manifest xmlns:android=""> <application> <activity android:name="comexampletestmainactivity" > <! > </activity> <activity android:name="comexampletesthelloworldactivity" > </activity> </application> </manifest> Bertrand Estellon (AMU) Android Master CCI March 23, / 266

247 Intentions Navigation dans l application Bertrand Estellon (AMU) Android Master CCI March 23, / 266

Programmation Mobile Android Master CCI

Programmation Mobile Android Master CCI Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 1 / 266 Organisation de l UE Objectifs du cours

Plus en détail

Organisation de l UE. Programmation Mobile Android Master CCI. Android SDK. Android SDK

Organisation de l UE. Programmation Mobile Android Master CCI. Android SDK. Android SDK Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 1 / 266 Organisation de l UE Objectifs du cours

Plus en détail

Les fichiers. Programmation Mobile Android Master CCI. Créer un fichier dans le stockage interne. Écrire et lire des données dans un fichier

Les fichiers. Programmation Mobile Android Master CCI. Créer un fichier dans le stockage interne. Écrire et lire des données dans un fichier Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Bertrand Estellon (AMU) Android Master CCI March 23, 2015 1 / 266 Les fichiers Deux espaces de stockage

Plus en détail

Android INTRODUCTION

Android INTRODUCTION Android INTRODUCTION Présentation Système d exploitation open source Développé en 2007 par une startup rachetée par Google. Caractéristique du Système d exploitation Android: Multi utilisateur, chaque

Plus en détail

TUTO 2 - ANDROID : BONJOUR QUI?

TUTO 2 - ANDROID : BONJOUR QUI? TUTO 2 - ANDROID : BONJOUR QUI? Dans ce tutoriel, on va développer une application assez simple. Ce tutoriel va permettre de découvrir des composants graphiques (Textfield, EditText et Bouton). Un aperçu

Plus en détail

TP 03. Cycle de vie d une activité. 1. Comme au TP 02, mais nommez le différemment (par exemple ActivityLifeCycle)

TP 03. Cycle de vie d une activité. 1. Comme au TP 02, mais nommez le différemment (par exemple ActivityLifeCycle) TP 03 Cycle de vie d une activité 1 ) Créer un nouveau projet Android 1. Comme au TP 02, mais nommez le différemment (par exemple ActivityLifeCycle) 2 ) Surchage des fonctions de callback 1. Ouvrez le

Plus en détail

Application Android par défaut

Application Android par défaut Projet Android À la création d un projet Android (IDE netbeans) tout un ensemble de répertoires et de fichiers sont engendrés. Source Packages : là où seront les sources de votre application. Generated

Plus en détail

Mobile : Application Native et Cross Platform avec Xamarin Introduction JEROME ROMAGNY

Mobile : Application Native et Cross Platform avec Xamarin Introduction JEROME ROMAGNY 2014 Mobile : Application Native et Cross Platform avec Xamarin Introduction JEROME ROMAGNY I. ANDROID... 2 1. APPLICATION NATIVE... 2 A. Installation... 2 AppInventor... 3 Emulateur... 3 B. Anatomie d

Plus en détail

Programmation de composant mobiles aka Android

Programmation de composant mobiles aka Android Programmation de composant mobiles aka Android responsable : Wies law Zielonka zielonka@liafa.univ-paris-diderot.fr http://liafa.univ-paris-diderot.fr/ zielonka September 19, 2015 Environnement de travail

Plus en détail

Votre première application Android - Introduction aux Interfac. utilisateur

Votre première application Android - Introduction aux Interfac. utilisateur Votre première application Android - Introduction aux Interfaces graphiques utilisateur frederic.guinand@univ-lehavre.fr 2014-2015 Plan Analyse d une app Android : visite guidée Introduction aux interfaces

Plus en détail

Android How To : Prise en Main

Android How To : Prise en Main Android How To : Prise en Main 1 Prise en main avec Eclipse... 2 1.1 Le projet... 2 1.2 Projet propriétés... 2 1.3 Le programme... 3 2 XML Base Layout... 4 2.1 Création du layout... 4 2.2 Lier le Layout

Plus en détail

Les premiers pas avec Android

Les premiers pas avec Android Les premiers pas avec Android Le but de ce TP est d expliquer les étapes nécessaires à la création et aux tests d une application sous Android. Dans un second temps, il vous permettra de configurer votre

Plus en détail

TP Android Les Intents avec passage de données

TP Android Les Intents avec passage de données TP Android Les Intents avec passage de données Romain Raveaux Polytech Tours Dans le TP précédent, nous avons vu comment démarrer une nouvelle fenêtre par le biais d une action sur un bouton posé sur une

Plus en détail

Programmation Android Ce que vous devez savoir. Cours Android - F. Michel 1 / 18

Programmation Android Ce que vous devez savoir. Cours Android - F. Michel 1 / 18 Programmation Android Ce que vous devez savoir 1 / 18 Plan 1 Connaissances essentielles 2 Définition d une GUI et adaptation au contexte 3 L objet Intent 2 / 18 Connaissances essentielles Sur la plate-forme

Plus en détail

Anne Tasso. Le livre de. Java. premier langage. édition. Groupe Eyrolles, 2000-2012, ISBN : 978-2-212-13538-1

Anne Tasso. Le livre de. Java. premier langage. édition. Groupe Eyrolles, 2000-2012, ISBN : 978-2-212-13538-1 8 Anne Tasso Java Le livre de premier langage e édition Groupe Eyrolles, 2000-2012, ISBN : 978-2-212-13538-1 partie n 3 Outils et techniques orientés objet Dans ce chapitre, les termes «applications mobiles»

Plus en détail

UPMC/Licence/Info/2I013 Flowdroid Android. Janvier 2015. Exemple de mise en œuvre

UPMC/Licence/Info/2I013 Flowdroid Android. Janvier 2015. Exemple de mise en œuvre UPMC/Licence/Info/2I013 Flowdroid Android Janvier 2015 Exemple de mise en œuvre Un jeu pour les enfants programmeurs Une variante du taquin Une grille 9x9 dont les cases contiennent les chiffres de 1 à

Plus en détail

Introduction à la programmation sous Android

Introduction à la programmation sous Android Introduction à la programmation sous Android Christophe Renaud M2 Informatique Version 1.1 du 30/09/2015 Objectifs du cours Connaître les bases de la programmation sous Android Environnement de développement

Plus en détail

Persistance des données sur une courte durée

Persistance des données sur une courte durée Persistance des données sur une courte durée Chantal Keller 16 octobre 2015 Persistance des données sur une courte durée Chantal Keller 1 / 16 Plan 1 Points généraux importants 2 Persistance des données

Plus en détail

TP2 : Initiation à la Programmation avec Android

TP2 : Initiation à la Programmation avec Android TP2 : Initiation à la Programmation avec Android 1 TP2 : Initiation à la Programmation avec Android Programmation Mobile Objectifs du TP Ce TP est une initiation à Android. Nous allons réaliser les premiers

Plus en détail

TP SIN Programmation sur androïde Support : eclipse

TP SIN Programmation sur androïde Support : eclipse TP SIN Programmation sur androïde Support : eclipse Support : Smartphone sur androïde Pré requis (l élève doit savoir): Savoir utiliser un ordinateur Savoir utiliser un Smartphone Programme Objectif terminale

Plus en détail

Introduction au développement sous Android TP1

Introduction au développement sous Android TP1 Introduction au développement sous Android TP1 Master ISIDIS/I2L - 2 me année année 2015-2016 Introduction Ce premier TP est une initiation à l environnement de développement Android Studio que vous utiliserez

Plus en détail

Développement mobile sous Android

Développement mobile sous Android Intro Act Orga IG Com Développement mobile sous Android Fabien Teytaud Université du Littoral Cote d Opale 1 er septembre 2014 Fabien Teytaud (Université du Littoral Cote d Opale) Android 1 er septembre

Plus en détail

TP n 4 - Quiz. 1) Création du projet. 2) Construction de la page d accueil. Pratique d Android

TP n 4 - Quiz. 1) Création du projet. 2) Construction de la page d accueil. Pratique d Android TP n 4 - Quiz 1) Création du projet L objectif ici est de construire une application Android proposant un Quiz sur des noms de films et d'acteurs à retrouver en fonction du nom du rôle du personnage. Créer

Plus en détail

Programmation Nomade (Android)

Programmation Nomade (Android) Programmation Nomade (Android) Dominique Archambault Master Technologie et Handicap Université Paris 8 Introduction 1 Introduction 1.1 Les systèmes d exploitation mobiles Les systèmes d exploitation mobiles

Plus en détail

TP1 : Traducteur «Français-Anglais»

TP1 : Traducteur «Français-Anglais» TP1 : Traducteur «Français-Anglais» Objectifs : créer deux activités, basculer entre activités, passer des paramètres entre activités, utiliser un service Internet pour faire réaliser une traduction, utiliser

Plus en détail

Android 4 Les fondamentaux du développement d applications Java

Android 4 Les fondamentaux du développement d applications Java 96 Android 4 Les fondamentaux du développement d applications Java Tous les éléments basiques d une vue (bouton, zone de texte ) héritent de cette classe. Modifier une vue peut s effectuer de deux manières

Plus en détail

Programmation Nomade (Android)

Programmation Nomade (Android) Programmation Nomade (Android) Dominique Archambault Master Technologie et Handicap Université Paris 8 Cours 1 Introduction 2012/2013 1 Introduction 1.1 Les systèmes d exploitation mobiles Les systèmes

Plus en détail

Bibliographie utilisée

Bibliographie utilisée Android View, onclick, Activity, Modèle Vue Contrôleur jean-michel Douin, douin au cnam point fr version : 26 Septembre 2012 Notes de cours 1 Bibliographie utilisée http://developer.android.com/resources/index.html

Plus en détail

Projet de programmation orientée objet

Projet de programmation orientée objet Projet de programmation orientée objet Florent Avellaneda Département Informatique et Interactions Aix-Marseille Université 12 janvier 2014 Description de l option Déroulement : Nombre d heures : 60 Rendu

Plus en détail

Exploration de la programmation android

Exploration de la programmation android Réalisé par: BOUHJJA Lamia Exploration de la programmation android Formation Assurer par: Club FreeWays SOMMAIRE : La création d un programme I. Introduction ANDROID générale II. Exploration de sa hiérarchie

Plus en détail

Android: Google map et Géolocalisation

Android: Google map et Géolocalisation Matiaz OUINE Juin 2012 Benoit RAYMOND Ensimag 2A Projet de spécialité David DUMENIL Florian GUFFON Projet de spécialité: Développement d une application Android utilisant la géolocalisation Tutoriel :

Plus en détail

Test de Personnalité. Groupe Entreprenant et Innovateur. France. Tutoriel. teaching@atipaxinti.com. Programmation Mobile. Cours. Arón HERRERA PONTE

Test de Personnalité. Groupe Entreprenant et Innovateur. France. Tutoriel. teaching@atipaxinti.com. Programmation Mobile. Cours. Arón HERRERA PONTE Groupe Entreprenant et Innovateur France Tutoriel 4 Test de Personnalité Cours Programmation Mobile Coach Arón HERRERA PONTE E-mail teaching@atipaxinti.com - 2011 - SOMMAIRE 1. Introduction... 3 2. Objectifs...

Plus en détail

1.3 Gestion d'une application

1.3 Gestion d'une application 1.3 Gestion d'une application 1. Un premier projet... Il est temps maintenant d'écrire la véritable première application Android avec l'inévitable affichage du mot bonjour, ce qui évidemment pour un développement

Plus en détail

TP2 : Client d une BDD SqlServer

TP2 : Client d une BDD SqlServer TP2 : Client d une BDD SqlServer Objectifs : utiliser la barre de menu, utiliser les préférences d application (settings) ou (options), gérer la persistance des données, utiliser la bibliothèque jtds:jdbc

Plus en détail

Projet Android. XML et JAVA

Projet Android. XML et JAVA Projet Android À la création d un projet Android (IDE AndroidStudio) tout un ensemble de répertoires et de fichiers sont engendrés. On en distingue 3 : 1. un fichier AndroidManifest.xml (dans le répertoire

Plus en détail

Création d un squelette d application

Création d un squelette d application 3 Création d un squelette d application Tous les livres consacrés à un langage ou à un environnement de programmation commencent par présenter un programme de démonstration de type "Bonjour à tous!" :

Plus en détail

Documentation d implémentation de l application Android de jeu géolocalisé

Documentation d implémentation de l application Android de jeu géolocalisé Documentation d implémentation de l application Android de jeu géolocalisé Introduction Ce document décrit l implémentation de l application Android en précisant l organisation du code et les différentes

Plus en détail

Développez une application Android Programmation en Java sous Android Studio

Développez une application Android Programmation en Java sous Android Studio Environnement de développement 1. Architecture d Android 9 1.1 Présentation d Android 9 1.2 Architecture 12 1.3 Play Store 13 2. Android Studio 14 2.1 Installation sous Windows 14 2.2 Installation sous

Plus en détail

Projet Android (LI260) Cours 2

Projet Android (LI260) Cours 2 Projet Android (LI260) Cours 2 Nicolas Baskiotis Université Pierre et Marie Curie (UPMC) Laboratoire d Informatique de Paris 6 (LIP6) S2-2013/2014 Plan Les ressources Debug Communication entre activités

Plus en détail

TP au menu «UI ANDROID»

TP au menu «UI ANDROID» TP au menu «UI ANDROID» Pré-requis & Installation ( du couvert) soit installer en natif sur vos postes (!!! ATTENTION!!! FromScratch 1,1 Go à télécharger ) JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html

Plus en détail

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer Programmation des applications mobiles avec Android 1 Inspiré du cours de Olivier Le Goaer 2 OS mobile : outils de développement D après le cours de Olivier Le Goaer 3 Plateforme de développement MobileApp

Plus en détail

Android, introduction

Android, introduction Android, introduction Sébastien Jean IUT de Valence Département Informatique v1.1, 7 novembre 2012 Android en bref Android est un système d exploitation développé depuis 2003, apparu officiellement en

Plus en détail

TP : dé couvérté d'android avéc uné todo list

TP : dé couvérté d'android avéc uné todo list TP : dé couvérté d'android avéc uné todo list Android Studio : Au premier lancement : on ne configure rien ( 1) pas d import 2) puis on ferme avec la croix en haut à gauche la fenêtre suivante). Il faut

Plus en détail

PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA

PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID) WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA ActionBar Android recommande d'utiliser ToolBar à la place de ActionBar. Nous allons suivre cette

Plus en détail

1. Programmation sous Android

1. Programmation sous Android Programmation XML Développez une application Android 1. Programmation sous Android Programmation XML Sous Android, les objets permettant l interaction avec l utilisateur s'appellent des widgets et, dans

Plus en détail

Les Fragments. 1.1 Définition, objectifs et philosophie des Fragments

Les Fragments. 1.1 Définition, objectifs et philosophie des Fragments Les Fragments Cet article est rédigé par Android2EE, expert en formation Android. Il est associé à deux tutoriaux vous montrant comment mettre en place : Une application avec des fragments statiques Une

Plus en détail

Android Fragment et MVC. Rémi Forax

Android Fragment et MVC. Rémi Forax Android Fragment et MVC Rémi Forax Fragment Fragment Sous-activité introduite par la version 11 (Android 3.0) et possède aussi un cycle de vie Il permet de découpe un écran en plusieurs partie, plusieurs

Plus en détail

Développement mobile sous Android TP1: Une première application avec un écran d accueil

Développement mobile sous Android TP1: Une première application avec un écran d accueil Développement mobile sous Android TP1: Une première application avec un écran d accueil Fabien Teytaud teytaud@lisic.univ-littoral.fr Eric Ramat September 18, 2013 1 Description Dans ce TP nous allons

Plus en détail

Créer des interfaces utilisateur

Créer des interfaces utilisateur 4 Créer des interfaces utilisateur Au sommaire de ce chapitre : Utiliser les vues et les layouts Comprendre les fragments Optimiser les layouts Créer des interfaces utilisateur indépendantes de la résolution

Plus en détail

opengeophone Documentation

opengeophone Documentation opengeophone Documentation Version 1.0.0 openmairie 28 June 2013 Table des matières 1 Manuel de l utilisateur 3 1.1 installation................................................ 3 1.2 Utilisation................................................

Plus en détail

Formation. Développement mobile. Bastien Stephan. Page 0

Formation. Développement mobile. Bastien Stephan. Page 0 Formation Développement mobile Bastien Stephan Page 0 Table des matières Introduction...2 Prérequis...2 Installation...2 Création de l application... 3 Interface...4 Codage...5 Page 1 Introduction Afin

Plus en détail

Outils, langage et approche Android Une introduction. Nicolas Stouls nicolas.stouls@insa lyon.fr

Outils, langage et approche Android Une introduction. Nicolas Stouls nicolas.stouls@insa lyon.fr Outils, langage et approche Android Une introduction Nicolas Stouls nicolas.stouls@insa lyon.fr Webographie La bible contenant «tout» : http://developer.android.com/index.html Les supports cette intervention

Plus en détail

PROJET D ANALYSE : APPLICATION ANDROID

PROJET D ANALYSE : APPLICATION ANDROID PROJET D ANALYSE : APPLICATION ANDROID NFP 210 :Construction Rigoureuse des logiciels Elie Dagher 6601f Maha Dehayni 4996f Sous la direction de :M.Pascal Fares Septembre 2011 Tables des Matières Introduction

Plus en détail

Android 4 Les fondamentaux du développement d'applications Java

Android 4 Les fondamentaux du développement d'applications Java La plateforme Android 1. Présentation 13 2. Historique 14 3. Google Play 15 3.1 Création d'un compte développeur 16 3.2 Publication d'une application 16 3.3 Suivi et mise à jour d'une application 18 Environnement

Plus en détail

Android 5 Les fondamentaux du développement d'applications Java

Android 5 Les fondamentaux du développement d'applications Java La plateforme Android 1. Présentation 13 2. Historique 14 3. Google Play 15 3.1 Création d'un compte développeur 16 3.2 Publication d'une application 17 3.3 Suivi et mise à jour d'une application 18 Environnement

Plus en détail

TP3 : Composants Android

TP3 : Composants Android TP3 : Composants Android 1 Objectifs du TP TP3 : Composants Android Programmation Mobile Ce TP a pour objectif de vous initier aux différents composants importants d Android. Nous allons dans ce TP réaliser

Plus en détail

TP architecture N-tiers en Java EE ou Java EE, Android : la synthèse. Le serveur GereCompteBancaireServlet

TP architecture N-tiers en Java EE ou Java EE, Android : la synthèse. Le serveur GereCompteBancaireServlet TP architecture N-tiers en Java EE ou Java EE, Android : la synthèse Vous allez, dans ce TP, construire une architecture client serveur, plus précisément une application Android cliente et une servlet

Plus en détail

TP Android Google Maps API V2

TP Android Google Maps API V2 TP Android Google Maps API V2 Objectif La création d'une application Android qui utilise les cartes Google Maps API v2 Android. Vue d'ensemble La création d'une application Android qui utilise les cartes

Plus en détail

BTS Services Informatiques aux Organisations 2014/2015 2 ème année Lycée A. Malraux. 1- Descriptif fonctionnel de l'application pour la construction

BTS Services Informatiques aux Organisations 2014/2015 2 ème année Lycée A. Malraux. 1- Descriptif fonctionnel de l'application pour la construction Application SIOQuiz 1- Descriptif fonctionnel de l'application pour la construction Objectif Construire une application Android proposant un Quiz sur des noms de films et d'acteurs à retrouver en fonction

Plus en détail

INTRODUCTION À ANDROID

INTRODUCTION À ANDROID Sources : Site : https://developer.android.com/ Livre «Android Programming the big nerd ranch guide» de B. Philips et B. Hardy Cours de Jean-Michel Douin (CNAM) Cours de Michael Laguerre (Playadz) INTRODUCTION

Plus en détail

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Anne Tasso Java Le livre de premier langage 10 e édition Avec 109 exercices corrigés Groupe Eyrolles, 2000-2015, ISBN : 978-2-212-14154-2 Chapitre 13 Développer une application Android La création d applications

Plus en détail

Créer des interfaces utilisateur

Créer des interfaces utilisateur 4 Créer des interfaces utilisateur Au sommaire de ce chapitre : Utiliser les Views et les layouts Optimiser les layouts Ressources Drawable XML Créer des interfaces utilisateur indépendantes de la résolution

Plus en détail

TP Android : Structure d une application

TP Android : Structure d une application 1 TP Android : Structure d une application Vincent Dubois Dans ce TP, nous allons utiliser Android Studio pour créer une première application Android et l exécuter sur un périphérique mobile. Les premières

Plus en détail

Android une Introduction

Android une Introduction Android une Introduction jean-michel Douin, douin au cnam point fr version : 26 Septembre 2012 Notes de cours 1 Sommaire Un peu d historique Andoid OS comme middleware Applications et évènements gérés

Plus en détail

Introduction à Android. Jean-Marc Lecarpentier Université de Caen

Introduction à Android. Jean-Marc Lecarpentier Université de Caen Introduction à Android Jean-Marc Lecarpentier Université de Caen Android Environnement de développement Basé sur noyau Linux Applications en Java Architecture spécifique Java VM adaptée aux terminaux mobiles

Plus en détail

Création d'interfaces simples

Création d'interfaces simples 77 Chapitre 5 Création d'interfaces simples 1. Les vues Création d'interfaces simples La création d'une interface sous Android peut s'effectuer de deux manières : La création statique, qui s'effectue en

Plus en détail

Groupe Entreprenant et Innovateur. France. Tutoriel. Mon Design Android 2D. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach.

Groupe Entreprenant et Innovateur. France. Tutoriel. Mon Design Android 2D. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach. Groupe Entreprenant et Innovateur France Tutoriel 5 Mon Design Android 2D Cours Programmation Mobile Coach Arón HERRERA PONTE E-mail teaching@atipaxinti.comatipaxinti.com - 2011 - SOMMAIRE 1. Introduction...

Plus en détail

Animation «PACMAN» Android 2D. Groupe Entreprenant et Innovateur. France. Tutoriel. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach.

Animation «PACMAN» Android 2D. Groupe Entreprenant et Innovateur. France. Tutoriel. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach. Groupe Entreprenant et Innovateur France Tutoriel 6 Animation «PACMAN» Android 2D Cours Programmation Mobile Coach Arón HERRERA PONTE E-mail teaching@atipaxinti.comatipaxinti.com - 2011 - SOMMAIRE 1. Introduction...

Plus en détail

PROGRAMME ANDROID. I) Création d une activité réagissant au click comme un bouton

PROGRAMME ANDROID. I) Création d une activité réagissant au click comme un bouton PROGRAMME ANDROID Que ce soit de la création de jeux, de l informatique de gestion toute la problématique lorsque on tente de comprendre comment fonctionne tous les jeux va être de dégager, les différents

Plus en détail

www.elektor.fr/android SOMMAIRE

www.elektor.fr/android SOMMAIRE www.elektor.fr/android Android Apprendre à programmer des applis Environnement de développement Eclipse Programmation orientée objet en JAVA Auteur : Stephan Schwark Éditeur : Elektor ISBN : 978-2-86661-187-3

Plus en détail

1) Lecture et Ecriture de Code Android (8 points)

1) Lecture et Ecriture de Code Android (8 points) Durée : 120 minutes Le barème n est donné qu à titre indicatif Tous documents autorisés. L usage de téléphone, montre, calculatrice, ordinateur ou tout autre objet connecté est interdit 1) Lecture et Ecriture

Plus en détail

Chapitre 1 : La Plateforme Android

Chapitre 1 : La Plateforme Android Chapitre 1 : La Plateforme Android Vue d ensemble Cette leçon présente une introduction à la Plateforme Android. Objectifs Ce chapitre a pour objectifs de permettre aux étudiants d acquérir les connaissances

Plus en détail

Android Studio SDK Présentation de l'outil

Android Studio SDK Présentation de l'outil Android Studio SDK Présentation de l'outil Introduction Android est un système d exploitation et un framework pour développer des applications de pour des terminaux de tous types Actuellement : Développement

Plus en détail

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles Programmation Android De la conception au déploiement avec le SDK Google Android 2 Damien Guignard Julien Chable Emmanuel Robles Avec la contribution de Nicolas Sorel et Vanessa Conchodon Groupe Eyrolles,

Plus en détail

INTRODUCTION AUX TESTS ANDROID AVEC ESPRESSO

INTRODUCTION AUX TESTS ANDROID AVEC ESPRESSO INTRODUCTION AUX TESTS ANDROID AVEC ESPRESSO Andr0 29 octobre 2015 Table des matières 1 Introduction 5 2 Présentation d Espresso 7 3 Fonctionnement général 9 4 Prérequis avant le développement des tests

Plus en détail

Warren PAULUS. Android SDK et Android x86

Warren PAULUS. Android SDK et Android x86 Android SDK et Android x86 2010/2011 Voici un petit tutoriel pour installer Android de façon à ce qu il soit compatible avec NetBeans et Eclipse, ainsi que l utilisation d Android x86. Ce tutoriel a été

Plus en détail

APPLICATIONS JAVA. Interface graphique avec XML pour une activité Android. Android Partie VI

APPLICATIONS JAVA. Interface graphique avec XML pour une activité Android. Android Partie VI APPLICATIONS JAVA Android Partie VI Ivan MADJAROV - 2015 Interface graphique avec XML IvMad, 2011-2015 2 Interface graphique avec XML pour une activité Android L'objectif principal de ce cours est de découvrir

Plus en détail

Créer des applications Android

Créer des applications Android Créer des applications Android Auteurs : Philippe Lacomme, Raksmey Phan Les outils nécessaires sont : - Android SDK - Eclipse - Le plugin ADT de Eclipse Plan (ceci n est pas un cours) Outils: Préparation

Plus en détail

Développement sur Android

Développement sur Android Développement sur Android V. Barichard vincent.barichard@univ-angers.fr LERIA - Département Informatique Université d Angers M2 - SILI M2 - SILI Développement sur Android 1 Rappels Chapitre I Rappels M2

Plus en détail

Android Guide de développement d'applications Java pour Smartphones et Tablettes (2ième édition)

Android Guide de développement d'applications Java pour Smartphones et Tablettes (2ième édition) Avant-propos 1. Introduction 15 2. À qui s'adresse cet ouvrage? 15 3. Connaissances nécessaires pour aborder cet ouvrage 16 4. Objectifs à atteindre 16 5. Téléchargements 17 6. Informations complémentaires

Plus en détail

Android : le système. Sources : Wikipedia, www.android.com

Android : le système. Sources : Wikipedia, www.android.com Android : le système Sources : Wikipedia, www.android.com Paris, 11/02/2014 Android "56 Système d'exploitation Open Source (licence Apache) ciblé principalement sur la téléphonie mobile et les tablettes

Plus en détail

TP ANDROID LES BASES. Concepts objets Soit la hiérarchie de classes présentées en cours:

TP ANDROID LES BASES. Concepts objets Soit la hiérarchie de classes présentées en cours: Préambule Matériel utilisé : tablette acer iconia A1 810 resolution 768x1024 (mdpi) Logiciels : Bundle Eclipse (pour le designer choisir 7'' WSVGA par exemple) et Genymotion (modifier la résolution : 768x1024

Plus en détail

TD/TP 1 Introduction au SDK d Android

TD/TP 1 Introduction au SDK d Android TD/TP 1 Introduction au SDK d Android Romain Raveaux 1 Introduction Android est un système d'exploitation pour téléphone portable de nouvelle génération développé par Google. Celui-ci met à disposition

Plus en détail

Guillaume MONTAVON Benoît MEILHAC. Rapport Technique du projet. Gestionnaire de tâches pour Android

Guillaume MONTAVON Benoît MEILHAC. Rapport Technique du projet. Gestionnaire de tâches pour Android Guillaume MONTAVON Benoît MEILHAC Rapport Technique du projet Gestionnaire de tâches pour Android Sommaire 1. Introduction... 3 2. Outils utilisés... 3 2.1. Android SDK... 3 2.2. Android dans Eclipse...

Plus en détail

Android - Semaine 4. Android - Semaine 4. Pierre Nerzic. février-mars 2015. 1 / 54 Pierre Nerzic

Android - Semaine 4. Android - Semaine 4. Pierre Nerzic. février-mars 2015. 1 / 54 Pierre Nerzic Android - Semaine 4 Pierre Nerzic février-mars 2015 1 / 54 Pierre Nerzic Durant les prochaines semaines, nous allons nous intéresser aux applications de gestion d'une liste d'items. Stockage d'une liste

Plus en détail

Cours Android. Développement et API

Cours Android. Développement et API Cours Android Développement et API Principaux OS orienté mobile ios ~ 12.1% Android ~ 81.9% Microsoft ~ 3.6% Historique Octobre 2003 : conception d'un OS mobile par Android Inc. (co-fondé par Andy Rubin)

Plus en détail

Familiarisation avec Eclipse / Netbeans

Familiarisation avec Eclipse / Netbeans Institut Galilée LEE Année 011-01 Master T.P. 0 Familiarisation avec Eclipse / Netbeans Lien important contenant le pdf du cours et du TP, et ensuite des sources : http://www-lipn.univ-paris13.fr/~fouquere/mpls

Plus en détail

ALLER PLUS LOIN DANS LE DÉVELOPPEMENT ANDROID

ALLER PLUS LOIN DANS LE DÉVELOPPEMENT ANDROID ALLER PLUS LOIN DANS LE DÉVELOPPEMENT ANDROID Andr0 29 octobre 2015 Table des matières 1 Introduction 5 2 Fragmenter vos projets 7 2.1 Fragment...................................... 7 2.1.1 Introduction

Plus en détail

Introduction à Eclipse

Introduction à Eclipse Introduction à Eclipse Eclipse IDE est un environnement de développement intégré libre (le terme Eclipse désigne également le projet correspondant, lancé par IBM) extensible, universel et polyvalent, permettant

Plus en détail

Bases de données. Programmation Mobile Android Master CCI. Définition du modèle. Définition du SQLiteOpenHelper

Bases de données. Programmation Mobile Android Master CCI. Définition du modèle. Définition du SQLiteOpenHelper SQLite Programmation Mobile Android Master CCI Bertrand Estellon Aix-Marseille Université March 23, 2015 Nous allons voir comment stocker de l information structurée sous la forme d une base de données

Plus en détail

Chapitre 2 Cycle de vie d une application

Chapitre 2 Cycle de vie d une application Chapitre 2 : Cycle de vie d une application 20 Chapitre 2 Cycle de vie d une application Chapitre 2 : Cycle de vie d une application 21 Une application Android est composée d un ensemble de 4 éléments

Plus en détail

Chapitre 2 Cycle de vie d une application

Chapitre 2 Cycle de vie d une application Chapitre 2 : Cycle de vie d une application 20 Chapitre 2 Cycle de vie d une application Chapitre 2 : Cycle de vie d une application 21 Une application Android est composée d un ensemble de 4 éléments

Plus en détail

Programmation Android IV. Cycle de vie d une application Android. Cours Android - F. Michel 1 / 35

Programmation Android IV. Cycle de vie d une application Android. Cours Android - F. Michel 1 / 35 Programmation Android IV. Cycle de vie d une application Android 1 / 35 Plan 1 Vue globale du cycle de vie 2 Démarrage d une activité 3 Pause et unpause 4 Arrêt et redémarrage 5 Destruction 6 Restauration

Plus en détail

Bibliographie utilisée

Bibliographie utilisée Android View, onclick,activity, Modèle Vue Contrôleur jean-michel Douin, douin au cnam point fr version : 24 Octobre 2011 Notes de cours 1 Bibliographie utilisée http://developer.android.com/resources/index.html

Plus en détail

ANDROID Tutoriel Lecture d'un flux XML distant et enchainement d'activités

ANDROID Tutoriel Lecture d'un flux XML distant et enchainement d'activités L'objectif de ce tutoriel est de vous présenter une des façons d'exploiter en lecture des informations distantes disponibles au format XML. L'application présentera le résultat dans une ListView 1/ Prérequis

Plus en détail

Développez une application Android Programmation en Java sous Eclipse (2ième édition)

Développez une application Android Programmation en Java sous Eclipse (2ième édition) Avant-propos 1. Pré-requis 13 2. Présentation du projet 13 3. Sujets complémentaires abordés 14 4. Téléchargement de l'application et du code source 15 Installation d'eclipse/android 1. Configuration de

Plus en détail

Cartes, géocodage et services de géolocalisation

Cartes, géocodage et services de géolocalisation 8 Cartes, géocodage et services de géolocalisation Au sommaire de ce chapitre : Géocodage avant et inverse Créer des cartes interactives avec les Map Views et les Map Activities Créer et ajouter des Overlays

Plus en détail

Envoyer un SMS. par Axon de Tuto Mobile (Tuto Mobile) Date de publication : 26 janvier Dernière mise à jour :

Envoyer un SMS. par Axon de Tuto Mobile (Tuto Mobile) Date de publication : 26 janvier Dernière mise à jour : Envoyer un SMS par Axon de Tuto Mobile (Tuto Mobile) Date de publication : 26 janvier 2011 Dernière mise à jour : Voici un nouveau tutoriel Android (depuis bien longtemps, diront les plus exigeants d'entre

Plus en détail

Programmation Android I. Introduction. Cours Android - F. Michel 1 / 57

Programmation Android I. Introduction. Cours Android - F. Michel 1 / 57 Programmation Android I. Introduction 1 / 57 Plan 1 Introduction 2 La plate-forme Android 3 Programmation Android 4 Hello World 2 / 57 Introduction Application mobile wikipédia Caractéristiques Cible :

Plus en détail

TP4 : Stockage de données

TP4 : Stockage de données TP4 : Stockage de données 1 TP4 : Stockage de données Programmation Mobile Objectifs du TP Ce TP a pour objectif de vous initier au stockage des données dans le téléphone Android, dans la mémoire interne

Plus en détail