Home
Programmation mobile avec Android
Contents
1. amp mnt 2015 01 18 11 31 drwxrwxr x amp proc 1970 01 01 01 00 dr xr xr x 5 root 2011 12 09 00 06 drwx 3 sbin 1970 01 01 01 00 drwxr x Ei Problems Javadoc 2 Declaration E Console X LogCat 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 2015 01 17 10 10 10 10 10 10 10 10 10 10 10 10 10 Ol Ol 0l 03 03 03 03 03 03 03 03 03 03 BEBRRUAEEERGSS Figure 13 Arbre des fichiers d une tablette SDK Manager hw trackBall no SDK Manager skin dynamic yes SDK Manager vm heapSize 32 Helloworld Helloworld Helloworld Helloworld Helloworld Helloworld Helloworld Helloworld Helloworld Helloworld GH Dvr v 0 y pee clear J Android Launch adb is running normally Performing fr iutlan helloworld MainActivity activity launch Automatic Target Mode using existing emulator emulator 5554 runni Uploading Helloworld apk onto device emulator 5554 Installing Helloworld apk Success Starting activity fr iutlan helloworld MainActivity on device Y ActivityManager Starting Intent act android intent action MAIN cl Q Figure 14 Console 14 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 1 5 5 Fen tre LogCat Des messages plus pr cis sont affich s dans
2. e par une image PNG ou JPG dans res drawable amp Bitmap bm BitmapFactory decodeResource getResources R drawable image Drawable d new BitmapDrawable getResources bm Android a d fini une norme pour des images PNG tirables les 9patch 113 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Figure 46 Image tirable 8 1 12 Images PNG tirables 9patch Il s agit d images PNG nomm es en 9 png qui peuvent tre dessin es de diff rentes tailles A gauche l image d origine et droite 3 exemplaires tir s Voir la figure 46 page 114 Une image 9patch est bord e sur ses 4 c t s par des lignes noires qui sp cifient les zones tirables en haut et gauche et les zones qui peuvent tre occup es par du texte droite et en bas Il faut utiliser l outil draw9patch pour les diter Ca demande un peu de savoir faire 8 1 13 Drawable suite e Un drawable peut galement provenir d une forme vectorielle dans un fichier XML Exemple res drawable carre xml 4 lt xml version 1 0 encoding UTF 8 gt lt shape xmlns android http schemas android com apk res android android shape rectangle gt lt stroke android width 4dp android color F000 gt lt gradient android angle 90 android startColor FFBB android endColor F77B gt lt corners android radius 16dp gt lt shape gt Figure 47 Dessin vectoriel XML 8 1 14
3. id menu_item2 gt lt item android id id menu_more android icon drawable ic_action_overflow android showAsAction always android title string menu_more gt lt menu gt lt item android id id menu_item3 gt lt item android id id menu_item4 gt lt menu gt lt item gt lt menu gt 5 1 9 Menus contextuels Voir la figure 31 page 63 62 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Modifier Supprimer Figure 31 MenuContextuel Ces menus apparaissent lors un clic long sur un l ment de liste Le principe est le m me que pour les menus normaux e Attribuer un couteur l v nement onCreateContextMenu Cet v nement correspond un clic long et au lieu d appeler la callback du clic long a fait appara tre le menu e D finir la callback de l couteur elle expanse un layout de menu e D finir la callback des items du menu 5 1 10 Associer un menu contextuel une vue Cela se passe par exemple dans la m thode onCreate d une activit 4 verride protected void onCreate Bundle savedInstanceState i super onCreate savedInstanceState setContentView R layout main ListView lv ListView findViewById android R id list registerForContextMenu lv Au lieu de registerForContextMenu lv on peut aussi faire amp lv setOnCreateContextMenuListener this 5 1 11 Callback d affichage du menu Lo
4. lt item gt Mars lt item gt lt string array gt lt resources gt Dans le programme Java il est possible de faire Resources res getResources String planetes res getStringArray R array planetes 2 1 15 Autres D autres notations existent e style nom pour des d finitions de res style Cmenu nom pour des d finitions de res menu Certaines notations package type nom font r f rence des donn es pr d finies comme Candroid style TextAppearance Large e android color black Il y a aussi une notation en type nom pour r f rencer la valeur de l attribut nom ex android attr textColorSecondary 23 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 2 2 Dispositions 2 2 1 Structure d une interface Android Un cran Android de type formulaire est g n ralement compos de plusieurs vues Entre autres Text View ImageView titre image EditText texte saisir Button CheckBox bouton cliquer case cocher Ces vues sont align es l aide de groupes sous classes de ViewGroup ventuellement imbriqu s LinearLayout positionne ses vues en ligne ou colonne RelativeLayout positionne ses vues l une par rapport l autre TableLayout positionne ses vues sous forme d un tableau 2 2 2 Arbre des vues Les groupes et vues forment un arbre FormRelatif LinearLayoutl Saisie LinearLayout2 Annuler Raz Annuler Fig
5. main xml z a Palette Structure gt Palette B Nexus One A ta Outline amp Form Widgets El E QAQA AA Hi RelativeLayout Textview Large Medium smsi Button las TextView Hello world Smal OFF Checkbox RadioButton CheckedTextView HelloWorld Spinner Sabie Hello world or E Properties 5 Text Fields Layouts p Composite Images amp Media lt No properties gt Time amp Date Transitions Advanced Custom amp ary Views Graphical Layout main xml Figure 7 diteur graphique IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 android layout_height wrap_content android text string hello_ world gt lt RelativeLayout gt 1 3 12 Reconstruction du projet Automatique e Ex modifier le fichier res values strings xml ou un source Java e Eclipse met jour les l ments gen et bin du projet automatiquement Manuelle parfois n cessaire quand on modifie des ressources e S lectionner le projet et choisir menu Project Clean 1 4 Premi re ex cution 1 4 1 Ex cution de l application Le SDK Android permet de e Installer l application sur une vraie tablette connect e par USB e Simuler l application sur une tablette virtuelle AVD AVD Android Virtual Device C est une machine virtuelle comme celles
6. new String 5 8 6 2 11 M thode rawQuery Cette m thode rawQuery permet d ex cuter des requ tes de type SELECT pas de la fin Elle retourne un objet Java de type Cursor qui permet de parcourir les n uplets un Aun amp Cursor cursor bdd rawQuery SELECT FROM table WHERE try A if cursor moveToFirst obligatoire while cursor isAfterLast test de fin utiliser le curseur cursor moveToNext n uplet suivant J i finally cursor close Remarquez le finally obligatoire qui permet de fermer le curseur 6 2 12 Classe Cursor La classe Cursor propose deux types de m thodes e celles qui permettent de parcourir les n uplets getCount retourne le nombre de n uplets getColumnCount retourne le nombre de colonnes moveToFirst met le curseur sur le premier faire isAfterLast retourne vrai si le parcours est fini moveToNext passe au n uplet suivant e celles qui permettent d obtenir la valeur de la colonne nc 0 getColumnCount 1 du n uplet courant getColumnName nc retourne le nom de la colonne nc isNull nc vrai si la colonne nc est nulle getInt nc getLong nc getFloat nc getString nc etc valeur de la colonne nc 6 2 13 Exemple de requ te classe TableTypes Y public static String getLibelle bdd long id as Cursor cursor bdd rawQuery SELECT libelle FROM Types WHERE
7. L une des activit s est marqu e comme d marrable de l ext rieur lt activity android name MainActivity gt lt intent filter gt lt action android name android intent action MAIN gt lt category android name android intent category LAUNCHER gt lt intent filter gt lt activity gt Un lt intent filter gt d clare les conditions de d marrage d une activit ici il dit que c est l activit principale 3 1 6 D marrage d une activit et Intents Les activit s sont d marr es l aide d Intents Un Intent contient une demande destin e une activit par exemple composer un num ro de t l phone ou lancer l application e action sp cifie ce que Intent demande Il y en a de tr s nombreuses VIEW pour afficher quelque chose EDIT pour modifier une information SEARCH e donn es selon l action ca peut tre un num ro de t l phone l identifiant d une information e cat gorie information suppl mentaire sur l action par exemple LAUNCHER pour lancer une application Une application a la possibilit de lancer certaines activit s d une autre application celles qui ont un intent filter 3 1 7 Lancement d une activit par programme Soit une application contenant deux activit s Activi et Activ2 La premi re lance la seconde par Y 33 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Intent intent new Intent this Act
8. La diff rence avec execSQL c est qu elles demandent un tableau de String Il faut donc convertir toutes les donn es en cha nes 6 2 9 M thode insert insert table null valeurs effectue une requ te du type INSERT INTO table coli col2 VALUES vali val2 Elle retourne l identifiant du nouveau n uplet Ses param tres sont e table fournir le nom de la table e null a correspond une bidouille e valeurs c est une structure du type ContentValues qui associe des noms et des valeurs quelconques ContentValues valeurs new ContentValues valeurs putNull _id valeurs put libelle cin ma bdd insert Types null valeurs 6 2 10 M thodes update et delete update table valeurs whereClause whereArgs fait UPDATE table SET coli vali col2 val2 WHERE et delete table whereClause whereArgs effectue DELETE FROM table WHERE Elles retournent le nombre de n uplets alt r s Les parametres sont e table fournir le nom de la table e valeurs ce sont les couples colonne valeur mettre e whereClause une condition contenant des jokers e whereArgs cha nes mettre la place des de la condition amp 82 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 ContentValues valeurs new ContentValues valeurs put libelle appareils bdd update Types valeurs _id new String 4 bdd delete Types _id BETWEEN AND
9. android name LE PACKAGE COMPLET PrefsFragment gt Mettre le nom du package complet devant le nom du fragment 5 4 9 Fragment pour les pr f rences Le fragment PrefsFragment h rite de PreferenceFragment w public class PrefsFragment extends PreferenceFragment verride public void onCreate Bundle savedInstanceState super onCreate savedInstanceState charger les pr f rences addPreferencesFromResource R xml preferences mettre jour les valeurs par d faut PreferenceManager setDefaultValues getActivity R xml preferences false C est tout Le reste est g r automatiquement par Android 5 4 10 Il est temps de faire une pause C est fini pour cette semaine rendez vous la semaine prochaine pour un cours sur les adaptateurs de bases de donn es et les WebServices 77 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 Bases de donn es SQLite3 lt gt Apr s avoir repr sent une liste d items sous forme d un tableau en semaine 4 nous allons la stocker dans un SGBD SQL Fon Figure 39 Logo de SQLite3 e SQLite3 e Requ tes et curseurs e WebServices 6 1 SQLite3 6 1 1 Stockage d informations Il n est pas pertinent d enregistrer des informations dans un tableau stock en m moire vive c est dire sur un support volatile Android contient un SGBD SQL appel SQLite3 parfait pour stocker des informations On peut le lancer p
10. e Le SDK Android et Eclipse e Cr ation d une application simple e Communication avec une tablette 1 1 Introduction 1 1 1 Android lt i l n en 2004 L rachet par Google en 2005 publi en 2007 version 1 5 de nombreuses versions depuis 1 1 2 D finition Syst me complet pour smartphones et tablettes e Gestion mat rielle syst me d exploitation Linux sous jacent e API de programmation interfaces utilisateur outils e Applications navigateur courrier volution et obsolescence tr s rapides voulues e Ce que vous allez apprendre sera rapidement d pass 1 an syntaxiquement m thodes param tres classes ressources mais pas les concepts principes organisation e Vous tes condamn e une autoformation permanente mais c est le lot des informaticiens 1 1 3 Composants d Android Voir la figure 1 page 4 1 1 4 Programmation d applications Application Android e Sources Java compil s pour une machine virtuelle Dalvik e Fichiers XML appel s ressources interface textes Certaines images de ce cours sont de http developer android com IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 APPLICATIONS Contacts Phone APPLICATION FRAMEWORK Window Content Activity Manager Y 8 Manager Providers Telephony Resource Location Notification ackage Manage Manager Manager Manager Manager LIBRARIES ANDRO
11. elle en tait 3 4 Vues et activit s 3 4 1 Obtention des vues La m thode setContentView charge une disposition sur l cran Ensuite l activit peut avoir besoin d acc der aux vues par exemple lire la cha ne saisie dans un texte Pour cela il faut obtenir l objet Java correspondant 4 EditText nom EditText findViewById R id edt_nom Cette m thode cherche la vue qui poss de cet identifiant dans le layout de l activit Si cette vue n existe pas mauvais identifiant ou pas cr e la fonction retourne null Un mauvais identifiant peut tre la raison d un bug 3 4 2 Propri t s des vues La plupart des vues ont des setters et getters Java pour leurs propri t s XML Par exemple TextView En XML amp lt TextView android id tid titre android lines 2 android text string debut gt En Java 4 TextView tvTitre TextView findViewById R id titre tvTitre setLines 2 tvTitre setText R string debut Consulter leur documentation pour les propri t s qui sont extr mement nombreuses 41 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 4 3 Actions de l utilisateur Prenons l exemple de ce Button Lorsque l utilisateur appuie dessus cela d clenche un v nement onClick et appelle automatiquement la m thode Valider de l activit amp lt Button android id id btn valider android layout width wrap content android l
12. public void onEvenement int param Js J 74 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 4 Pr f rences d application 5 4 1 Illustration Les pr f rences m morisent des choix de l utilisateur entre deux ex cutions de l application a Settings En ligne Y Connexion permanente au serveur Nombre Max Nombre maximal d l ments list s Serveur URL du serveur contenant les donn es Figure 38 Pr f rences de l application 5 4 2 Pr sentation Il y a deux concepts mis en jeu e Une activit pour afficher et modifier les pr f rences e Une sorte de base de donn es qui stocke les pr f rences bool ens nombres entiers r els cha nes et ensembles de cha nes Chaque pr f rence poss de un identifiant C est une cha ne comme prefs_nbmax La base de donn es stocke une liste de couples identifiant valeur Voir la documentation Android 5 4 3 D finition des pr f rences D abord construire le fichier res xml preferences xml 4 lt xml version 1 0 encoding utf 8 gt lt PreferenceScreen xmlns android gt lt CheckBoxPreference android key prefs online android title En ligne android summary Connexion permanente au serveur android defaultValue true gt lt EditTextPreference android key prefs_nbmax android title Nombre Max android summary Nombre maximal d l ments list s android inputType number
13. t ajouter l chelle des distances ScaleBarOverlay echelle new ScaleBarOverlay this mMap getOverlays add echelle 105 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 7 3 9 Mise jour de la carte Chaque fois qu on rajoute quelque chose sur la carte il est recommand de rafra chir la vue t redessiner la carte mMap invalidate Ca marche sans cela dans la plupart des cas mais y penser s il y a un probl me 7 3 10 Marqueurs Un marqueur est repr sent par un Marker amp Marker mrkIUT new Marker mMap GeoPoint gpIUT new GeoPoint 48 75792 3 4520072 mrkIUT setPosition gpIUT mrkIUT setSnippet D partement INFO IUT de Lannion mrkIUT setAlpha 0 75f mrkIUT setAnchor Marker ANCHOR_CENTER Marker ANCHOR_ BOTTOM mMap getOverlays add mrkIUT e snippet est une description succincte du marqueur e alpha est la transparence 1 0 opaque 0 0 invisible e anchor d signe le hot point de l image le pixel aligner avec la position 7 3 11 Marqueur personnalis s Pour changer l image par d faut une main dans une poire il vous suffit de placer une image png dans res drawable Puis charger cette image et l attribuer au marqueur amp Drawable fleche getResources getDrawable R drawable fleche mrkIUT setIcon fleche mrkIUT setAnchor Marker ANCHOR RIGHT Marker ANCHOR BOTTOM B timent G Batiment E Figure
14. D finition de la classe PlaneteView Le constructeur de PlaneteView est n cessaire mais quasi vide amp public class PlaneteView extends RelativeLayout public PlaneteView Context context super context attrs Tout se passe dans la m thode de classe PlaneteView create appel e par l adaptateur Rappel de la page 53 cr er ou r cup rer un PlaneteView PlaneteView vueltem PlaneteView recup if vueltem null vueltem PlaneteView create parent Cette m thode create g n re les vues du layout item xml 4 4 9 Cr er des vues avec un layout XML La g n ration de vues pour afficher les items repose sur un m canisme appel LayoutInflater qui fabrique des vues Android partir d un layout XML amp LayoutInflater li LayoutInflater from context View vueltem li inflate R layout item_planete parent On lui fournit l identifiant du layout p ex celui des items Elle cr e les vues sp cifi es dans res layout item_planete xml e context est l activit qui affiche toutes ces vues e parent est la vue qui doit contenir ces vues null si aucune 4 4 10 M thode PlaneteView create La m thode de classe PlaneteView create expanse le layout des items l aide d un LayoutInflater Y public static PlaneteView create ViewGroup parent LayoutInflater li LayoutInflater from parent getContext PlaneteView itemView PlaneteView li inflate R layout item_planete pa
15. Variantes Android permet de cr er des dessinables variantes par exemple pour des boutons personnalis s y LA lt xml version 1 0 encoding utf 8 gt lt selector xmlns android gt lt item android drawable drawable button_pressed android state_pressed true gt lt item android drawable drawable button_checked 114 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 android state_checked true gt lt item android drawable drawable button default gt lt selector gt L une ou l autre des images sera choisie en fonction de l tat du bouton enfonc rel ch inactif 8 1 15 Utilisation d un Drawable Ces objets dessinable peuvent tre employ s dans un canvas Puisque ce sont des objets vectoriels il faut d finir les coordonn es des coins haut gauche et bas droit ce qui permet d tirer la figure Les tailles qui sont indiqu es dans le xml sont pourtant absolues 4 Drawable drw getResources getDrawable R drawable carre drw setBounds x1 y1 x2 y2 coins drw draw canvas Remarquez le petit pi ge de la derni re instruction on passe le canvas en param tre la m thode draw du drawable NB la premi re instruction est placer dans le constructeur de la vue afin de ne pas ralentir la fonction de dessin 8 1 16 Enregistrer un dessin dans un fichier C est tr s facile Il suffit de r cup rer le bitmap associ la vu
16. ViewGroup container Bundle savedInstanceState liste des l ments venant de l application FragmentApplication app FragmentApplication getActivityO getApplicationContext listeltems app getListe layout du fragment setHasOptionsMenu true le fragment a un menu return inflater inflate android R layout list_content container false 5 3 7 ListFragment suite Voici la suite le remplissage de la liste et attribution d un couteur pour les clics sur les l ments Y verride public void onActivityCreated Bundle savedInstanceState super onActivityCreated savedInstanceState adaptateur standard pour la liste ArrayAdapter lt Item gt adapter new ArrayAdapter lt Item gt getActivity android R layout simple_list_item_1 listeItems setListAdapter adapter attribuer un couteur pour les clics sur les items 69 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 ListView lv getListView lv setOnItemClickListener this 5 3 8 Menus de fragments Un fragment peut d finir un menu Ses l ments sont int gr s la barre d action de l activit Seule la m thode de cr ation du menu diff re l inflater arrive en param tre amp ODverride public void onCreate0ptionsMenu Menu menu Menulnflater menulnflater super onCreate0ptionsMenu menu menulnflater menulnflater inflate R menu edit fragment menu NB dans la m
17. android numeric integer android defaultValue 100 gt lt PreferenceScreen gt 75 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 4 4 Explications Ce fichier xml d finit la fois e Les pr f rences l identifiant android key le titre r sum android title le sous titre d taill android summary la valeur initiale android defaultValue e La mise en page C est une sorte de layout contenant des cases cocher des zones de saisie Il est possible de cr er des pages de pr f rences en cascade comme par exemple les pr f rences syst me Consulter la doc pour conna tre tous les types de pr f rences NB le r sum n affiche malheureusement pas la valeur courante Consulter stackoverflow pour une proposition 5 4 5 Acc s aux pr f rences Les pr f rences sont g r es par une classe statique appel e PreferenceManager On doit lui demander une instance de SharedPreferences qui repr sente la base et qui poss de des getters pour chaque type de donn es amp r cup rer la base de donn es des pr f rences SharedPreferences prefs PreferenceManager getDefaultSharedPreferences getBaseContext r cup rer une pr f rence bool enne boolean online prefs getBoolean prefs online true Les getters ont deux param tres l identifiant de la pr f rence et la valeur par d faut 5 4 6 Pr f rences cha nes et nombres Pour les
18. au retour 4 5 3 Clic sur un l ment suite Si votre activit est une simple Activity parce qu il y a autre chose qu une liste ou plusieurs listes alors c est plus complexe e Votre activit doit impl menter l interface AdapterView OnItemClickListener e Vous devez d finir this en tant qu couteur du ListView e Votre activit doit surcharger la m thode onItemClick 97 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 5 4 Clic sur un l ment suite 4 public class MainActivity extends Activity implements OnItemClickListener de verride protected void onCreate Bundle savedInstanceState appeler la m thode surcharg e dans la superclasse super onCreate savedInstanceState mettre en place le layout contenant le ListView setContentView R layout main ListView lv ListView findViewById android R id list lv setOnItemClickListener this 4 5 5 Clic sur un l ment fin Et voici sa m thode onltemClick y verride public void onltemClick AdapterView lt gt parent View v int position long id g rer un clic sur 1 item identifi par id Il existe aussi la m thode boolean onltemLongClick ayant les m mes param tres install e par setOnItemLongClickListener 4 5 6 Liste d l ments cochables Android offre des listes cochables comme celles ci Mercure Mercure V nus V nus Terre Y Terre A Mars
19. construit un curseur avec la r ponse JSON du serveur On est oblig de fournir les noms des colonnes car ils ne sont pas pr sents dans les donn es JSON Cette classe est assez complexe Une partie des explications viendra la semaine prochaine 6 5 10 Modification d un n uplet Voici maintenant une requ te POST pour modifier un n uplet amp public static void updateType RemoteDatabase bdd RemoteDatabaseListener listener Type type param tres de la requ te ContentValues params new ContentValues params put id type getId 93 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 params put libelle type getNom requ te Post asynchrone bdd post listener update_type php params 6 5 11 Script update_type php Avant d expliquer la m thode post de la classe RemoteDatabase voici le script update_type php qui est d clench par la requ te amp connexion la base de donn es db new PDO pgsql host hostname dbname dbname login passwd param tres de la requ te id _POST _id libelle _POST libelle pr paration et ex cution query db gt prepare UPDATE Types SET libelle WHERE _id query gt execute array libelle id 6 5 12 M thode post couteur script params Cette m thode appelle un script PHP en lui fournissant des param tres Par exemple c est le script update_type php avec les pa
20. dans le layout d item il faut employer un CheckedTextView m me vide plut t qu un CheckBox qui ne r agit pas aux clics bug Android 4 5 10 Ouf c est fini C est tout pour cette semaine La semaine prochaine nous parlerons des menus dialogues et fragments 99 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 Ergonomie Le cours de cette semaine concerne l ergonomie d une application Android e Menus et barre d action e Popup up messages et dialogues e Activit s et fragments e Pr f rences 5 1 Barre d action et menus 5 1 1 Barre d action La barre d action contient l ic ne d application 1 quelques items de menu 2 et un bouton pour avoir les autres 3 Figure 29 Barre d action 5 1 2 R alisation d un menu Avant Android 3 0 API 11 les actions d une application taient lanc es avec un bouton de menu m canique Depuis elles sont d clench es par la barre d action C est presque la m me chose Le principe g n ral un menu est une liste d items qui appara t soit quand on appuie sur le bouton menu soit sur la barre d action Certains de ces items sont pr sents en permanence dans la barre d action La s lection d un item d clenche une callback Doc Android sur la barre d action et sur les menus Il faut d finir e un fichier res menu nom du menu xml e des th mes pour afficher soit la barre d action soit des menus e deux callba
21. public void onUpgrade SQLiteDatabase bdd int oldVersion int newVersion q suppression de toutes les donn es TablesTypes drop bdd re cr ation de la base onCreate bdd 6 2 22 m thode onUpgrade public void onUpgrade SQLiteDatabase bdd int oldVersion int newVersion Dans le cas d une application s rieuse on ne d truit pas toutes les donn es utilisateur quand on change le sch ma C est vous de d terminer les modifications minimales qui permettent de transformer les donn es pr sentes de leur version actuelle o1dVersion la version newVersion Il est indiqu de proc der par tapes e passer de la version oldVersion la oldVersion 1 86 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 e passer de la version oldVersion 1 la oldVersion 2 e ainsi de suite jusqu arriver la newVersion 6 2 23 m thode on Upgrade suite Cela donne quelque chose comme ca amp ODverride public void onUpgrade int oldVersion int newVersion while oldVersion lt newVersion switch oldVersion 4 case 1 amener la base de la Vi la V2 bdd execSQL ALTER TABLE Types ADD COLUMN rang INTEGER break case 2 amener la base de la V2 la V3 break oldVersion 6 2 24 Retour l application Avec un helper cela devient tr s simple d ouvrir une base en consultation seule ou en modification 4 nd MySQLiteHelper helper n
22. IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Soit un layout contenant deux FrameLayout vides 4 lt LinearLayout xmlns android android orientation horizontal gt lt FrameLayout android id id frag liste gt lt FrameLayout android id id frag infos gt lt LinearLayout gt On peut dynamiquement attribuer un fragment chacun 5 3 12 Attribution d un fragment dynamiquement En trois temps obtention du manager cr ation d une transaction et attribution des fragments aux r ceptacles 4 gestionnaire FragmentManager manager getFragmentManager UA transaction FragmentTransaction trans manager beginTransaction mettre les fragments dans les r ceptacles trans add R id frag liste new ListeFragment trans add R id frag_infos new InfosFragment trans commit Les FrameLayout sont remplac s par les fragments 5 3 13 Disposition selon la g om trie de l cran Le plus int ressant est de faire appara tre les fragments en fonction de la taille et l orientation de l cran application liste infos E Fragments NOUVEAU a Fragments NOUVEAU pi cos 30 pl 0 86602540378 e e v2 v2 cos 30 cos 30 log 2 log 2 Figure 37 Un ou deux fragments affich s 71 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 3 14 Changer la disposition selon la g om trie Pour cela
23. Location position locationManager getLastKnownLocation LocationManager GPS_ PROVIDER if position null mapController setCenter new GeoPoint position NB a ne marche qu en plein air r ception GPS Consulter aussi cette page propos de l utilisation du GPS et des r seaux 7 3 15 Autorisations Il faut aussi autoriser l acc s au GPS dans le Manifeste en plus des acc s au r seau et l criture sur la carte m moire amp 107 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt uses permission android name android permission ACCESS_COARSE_LOCATION gt lt uses permission android name android permission ACCESS_FINE_LOCATION gt lt uses permission android name android permission ACCESS_WIFI_STATE gt lt uses permission android name android permission ACCESS_NETWORK_STATE gt lt uses permission android name android permission INTERNET gt lt uses permission android name android permission WRITE_EXTERNAL_STORAGE gt 7 3 16 Mise jour en temps r el de la position Si on veut suivre et afficher les mouvements 4 locationManager requestLocationUpdates LocationManager GPS_PROVIDER 0 O this On peut utiliser la localisation par Wifi mettre NETWORK_PROVIDER Le dernier param tre est un couteur j ai mis this Il doit impl menter les m thodes de l interface LocationListener dont 4 public void onLocationChanged Location pos
24. Mars A Juniter Juniter Figure 28 l ments cochables Voir la figure 28 page 59 58 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Le style de la case cocher d pend du choix unique ou multiple 4 5 7 Liste cochable simple Android propose un layout pr d fini pour items cochables amp verride protected void onCreate Bundle savedInstanceState setListAdapter new ArrayAdapter lt Planete gt this android R layout simple list_item_checked android R id texti mListe ListView lv ListView findViewById android R id list lv setChoiceMode ListView CHOICE_MODE_SINGLE 4 5 8 Liste choix multiples Toujours avec des listes pr d finies c est une simple variante e mettre simple list item multiple choice la place de simple list _item_checked e mettre ListView CHOICE MODE MULTIPLE au lieu de ListView CHOICE MODE SINGLE La m thode onListItemClick est appel e sur chaque l ment cliqu 4 5 9 Liste cochable personnalis e Si on veut un layout personnalis comme PlaneteView il faut que sa classe impl mente l interface Checkable c d 3 m thodes e public boolean isChecked indique si l item est coch e public void setChecked boolean etat doit changer l tat interne de l item e public void toggle doit inverser l tat interne de Vitem Il faut rajouter un bool en dans chaque item celui que j ai appel tat interne D autre part
25. afin de comprendre le principe Voir la figure 50 page 118 8 3 3 Concepts Plusieurs concepts interviennent dans ce s lecteur de couleur e La fen tre d rive de DialogFragment elle affiche un dialogue de type AlertDialog avec des boutons Ok et Annuler e Cet AlertDialog contient une vue personnalis e contenant des SeekBar pour r gler les com posantes de couleur e Les SeekBar du layout ont des callbacks qui mettent jour la couleur choisie en temps r el e Le bouton Valider du AlertDialog d clenche un couteur dans l activit qui a appel le s lecteur 117 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Choisissez une couleur Annuler Figure 50 S lecteur de couleur simple 8 3 4 Fragment de dialogue Le fragment de dialogue doit d finir plusieurs choses e C est une sous classe de FragmentDialog public class ColorPickerDialog extends DialogFragment e Il d finit une interface pour un couteur qu il appellera la fin public interface OnColorChangedListener void colorChanged int color e Une m thode onCreateDialog retourne un AlertDialog pour b n ficier des boutons ok et annuler Le bouton ok est associ une callback qui active l couteur en lui fournissant la couleur 8 3 5 M thode onCreateDialog 12 public Dialog onCreateDialog Bundle savedInstanceState Context ctx getActivity Builder builder new AlertDialog Builder ctx
26. builder setTitle Choisissez une couleur final ColorPickerView cpv new ColorPickerView ctx builder setView cpv builder setPositiveButton android R string yes new DialogInterface OnClickListener public void onClick DialogInterface dialog int btn pr venir l couteur mListener colorChanged cpv getColor DE builder setNegativeButton android R string no null return builder create 118 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 8 3 6 Vue personnalis e dans le dialogue Voici la d finition de la classe ColorPicker View qui est l int rieur du dialogue d alerte Elle g re quatre curseurs et une couleur amp private static class ColorPickerView extends LinearLayout couleur d finie par les curseurs private int mColor constructeur ColorPickerView Context context constructeur de la superclasse super context mettre en place le layout inflate getContext R layout colorpickerdialog this 8 3 7 Layout de cette vue Le layout colorpickerdialog xml contient quatre SeekBar rouge vert bleu et alpha Ils ont une callback comme celle ci amp SeekBar sbRouge SeekBar findViewById R id sbRouge sbRouge setOnSeekBarChangeListener new OnSeekBarChangeListener public void onProgressChanged SeekBar seekBar int progress boolean fromUser mColor Color argb Color alpha mColor progress Color green mColor Color
27. conna t les commandes standard Unix de base 1s cd cp mv ps 1 5 11 Syst me de fichiers Android On retrouve l architecture des dossiers Unix avec des variantes e Dossiers Unix classiques usr dev etc lib sbin e Les volumes sont mont s dans mnt par exemple mnt sdcard m moire flash interne et mnt extSdCard SDcard amovible e Les applications sont dans system app pour les pr install es data app pour les applications normales e Les donn es des applications sont dans data data nom du paquetage java Ex data data fr iutlan helloworld NB il y a des restrictions d acc s sur une vraie tablette car vous n y tes pas root enfin en principe 1 5 12 Mode d emploi suite e Pour changer des fichiers avec une tablette adb push nom du fichier local nom complet dest envoi du fichier local sur la tablette 16 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 adb pull nom complet fichier r cup re ce fichier de la tablette e Pour g rer les logiciels install s adb install paquet apk adb uninstall nom du paquetage java e Pour archiver les donn es de logiciels adb backup f fichier local nom du paquetage java enregistre les donn es du des logiciels dans le fichier local adb restore fichier local restaure les donn es du des logiciels d apr s le fichier 1 6 Cr ation d un paquet installable 1 6 1 P
28. cup re une vue inutile au lieu d en allouer une nouvelle NB elle s appelle convertView dans les docs e parent le ListView auquel sera rattach cette vue 4 4 3 M thode getView personnalis e Voici la surcharge de cette m thode amp Override public View getView int position View recup ViewGroup parent cr er ou r cup rer un PlaneteView PlaneteView vueltem PlaneteView recup if vueltem null vueltem PlaneteView create parent lt afficher les valeurs vueltem display super getItem position return vueltem 4 4 4 M thode PlaneteView create Cette m thode cr e une instance de PlaneteView C est un groupe de vues qui affiche un seul item des donn es e Le PlaneteAdapter cr e des PlaneteView la demande du ListView e Un PlaneteView est une sorte de RelativeLayout contenant des TextView et ImageView e Cette disposition est d finie par un fichier layout XML res layout item_planete xml L ensemble des donn es est affich par plusieurs instances de PlaneteView dans le ListView 53 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 4 5 Layout d item res layout item_planete xml C est subtil on va remplacer la racine du layout des items un RelativeLayout par une classe personnalis e amp lt xml version 1 0 encodiug utt 8 2 gt lt fr iutlan planetes PlaneteView mins an dro android layout_width match_parent a
29. il manque quelque chose pour r cup rer le r sultat une fois le travail termin Pourquoi n est il pas possible de faire ceci long id new RechercheMeilleur mProgressBar execute Le Hobbit Ce n est pas possible car 1 execute retourne void donc rien 2 l ex cution de doInBackground n est pas dans le m me thread or un thread ne peut pas faire return dans un autre 3 execute prend du temps et justement on souhaite ne pas attendre Solution d finir le thread appelant en tant qu couteur de cet AsyncTask 7 1 13 R cup ration du r sultat d un AsyncTask Pour recevoir le r sultat d un AsyncTask il faut g n ralement mettre en place un couteur qui est d clench dans la m thode onPostExecute Exemple 4 98 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 public interface RechercheMeilleurListener public void onRechercheMeilleurFinie Long id couteur pour la fin du traitement private RechercheMeilleurListener ecouteur appel e quand c est fini r veille l couteur protected void onPostExecute Long resultat ecouteur onRechercheMeilleurFinie resultat L couteur est fourni en param tre du constructeur par exemple new RechercheMeilleur this execute 7 1 14 Simplification On peut simplifier un peu s il n y a pas besoin de ProgressBar et si le r sultat est directement utilis dans onPostExecute amp private clas
30. instancier la classe g n rique Pour l exemple j ai d fini un constructeur qui permet de sp cifier une ProgressBar mettre jour pendant le travail Par exemple amp private class RechercheMeilleur extends AsyncTask lt String Integer Long gt ProgressBar mettre jour private ProgressBar mBarre constructeur fournir la ProgressBar concern e RechercheMeilleur ProgressBar barre this mBarre barre 97 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 7 1 10 AsyncTask suite Voici la suite avec la t che de fond et l avancement amp protected Long doInBackground String libelles long identifiant 1L int nbre libelles length for int i 0 i lt nbre i TAI a va appeler onProgressUpdate avec le publishProgress int i 100 0f nbre a va appeler onPostErecute identifiant return identifiant protected void onProgressUpdate Integer progress mBarre setProgress progress 0 7 1 11 Lancement d une AsyncTask C est tr s simple on cr e une instance de cet AsyncTask et on appelle sa m thode execute Ses param tres sont directement fournis doInBackground 4 new RechercheMeilleur mProgressBar execute Le Hobbit execute va cr er un thread s par pour effectuer doInBackground mais les autres m thodes du AsyncTask restent dans le thread principal 7 1 12 execute ne retourne rien En revanche
31. la fen tre LogCat ry i gt EL Problems Javadoc Declaration El Console 2 LogCat X niveau clear a filtre tag Saved Filte ajo All messages no Le Time PID TID Application Text 4 friutian hellowor Ep D 01 17 10 03 29 952 601 601 fr iutlan helloworl 11DEGL loaded system lib egl libEGL_emula D 01 17 10 03 29 952 601 601 fr iutlan helloworl Hostconnection get New Host Conn D 61 17 10 03 29 982 601 601 fr iutlan helloworli libEGL loaded system lib egl libGLESv1_CM D 61 17 10 03 29 992 601 601 fr iutlan helloworl 1ibEGL loaded system lib egl libGLESv2_em W 01 17 10 03 30 062 601 601 fr iutlan helloworli EGL_emulat eglSurfaceAttrib not implemented D 01 17 10 03 30 072 601 601 fr iutlan helloworl OpenGLRend Enabling debug mode O Figure 15 Fen tre LogCat mis par les applications debug infos erreurs 1 5 6 Filtrage des messages Il est commode de d finir des filtres pour ne pas voir la totalit des messages de toutes les applications de la tablette e sur le niveau de gravit verbose debug info warn error et assert e sur l tiquette TAG associ e chaque message e sur le package de application qui met le message 1 5 7 mission d un message pour LogCat Une application met un message par ces instructions 4 import android util Log public class MainActivity extends Activity public static final String TAG hello void maMethode Log i TAG Salut Fonc
32. m me que pour un clic Il re oit le num ro du choix en 2 param tre idBtn Dans ce cas ne pas appeler confirm setMessage car ils sont exclusifs C est soit une liste soit un message 5 2 7 Dialogues personnalis s Lorsqu il faut demander une information plus complexe l utilisateur mais sans que a n cessite une activit part enti re il faut faire appel un dialogue personnalis Cr ation d un type nouveau type informatique Valider Figure 34 Dialogue perso 5 2 8 Cr ation d un dialogue Il faut d finir le layout du dialogue incluant tous les textes sauf le titre et au moins un bouton pour valider sachant qu on peut fermer le dialogue avec le bouton back lt xml version 1 0 encoding utf 8 gt lt LinearLayout xmlns android gt lt TextView android id id dialog titre gt lt EditText android id id dialog libelle gt lt Button android id id dialog btn_ valider gt lt LinearLayout gt Ensuite cela ressemble ce qu on fait dans onCreate d une activit setContentView avec le layout et des setOnClickListener pour attribuer une action aux boutons 66 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 2 9 Affichage du dialogue y nd cr er le dialogue final Dialog dialog new Dialog this dialog setContentView R layout edit_dialog dialog setTitle Cr ation d un type bouton v
33. param tr par le type des l ments mis entre lt gt ce type doit tre un objet import java util ArrayList ArrayList lt TYPE gt liste new ArrayList lt TYPE gt Quelques m thodes utiles e liste size retourne le nombre d l ments pr sents e liste clear supprime tous les l ments e liste add elem ajoute cet l ment la liste e liste remove elem ou indice retire cet l ment e liste get indice retourne l l ment pr sent cet indice e liste contains elem true si elle contient cet l ment e liste index0f elem indice de l l ment s il y est 4 1 7 Donn es initiales dans les ressources On cr e deux tableaux dans le fichier res values arrays xml 4 lt resources gt lt string array name noms gt lt item gt Mercure lt item gt lt item gt Venus lt item gt lt string array gt lt integer array name distances gt lt item gt 58 lt item gt lt item gt 108 lt item gt lt integer array gt lt resources gt 47 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 1 8 Donn es dans les ressources suite Ensuite on r cup re ces tableaux pour remplir le ArrayList amp acc s aux ressources Resources res getResources final String noms res getStringArray R array noms final int distances res getIntArray R array distances recopie dans le ArrayList mListe new ArrayList lt
34. pr sent layout vertical Cela implique plusieurs petites choses e L couteur des clics sur la liste est le fragment frag_liste Il doit transmettre litem cliqu a l activit e L activit doit d terminer si le fragment frag_infos est affich 72 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 s il est visible elle lui transmet l item cliqu sinon elle lance une activit sp cifique InfosActivity Voici les tapes 5 3 17 Interface pour un couteur D abord la classe ListeFragment d finir une interface pour g rer les s lections d items et un couteur w public interface OnItemSelectedListener public void onItemSelected Item item private OnltemSelectedListener listener Ce sera l activit principale qui sera cet couteur gr ce a 4 Override public void onAttach Activity activity super onAttach activity listener OnItemSelectedListener activity 5 3 18 couteur du fragment Toujours dans la classe ListeFragment voici la callback pour les s lections dans la liste amp Override public void onItemClick AdapterView lt gt parent View view int position long id Item item listeltems get int id listener onItemSelected item Elle va chercher litem s lectionn et le fournit l couteur c est dire l activit principale 5 3 19 couteur de l activit Voici maintenant l couteur de l activ
35. requ te donc chacun sait exactement quels param tres il va recevoir 1 L application construit une requ te HTTP p ex de type GET e URL http serveur script param tres e param tres conditions du select p ex identifiant 3 2 L application cliente envoie cette requ te au serveur puis attend la r ponse 3 Le script PHP ex cute la requ te puis retourne le r sultat encod en JSON l application 4 L application d code le r sultat et l affiche Les autres requ tes suivent le m me principe client serveur 6 5 3 Exemple de script PHP Post Voici un script qui modifie un n uplet Il est lanc par un POST amp connexion au serveur SQL par PDO db new PDO pgsql host hostname dbname dbname login passwd param tres de la requ te TODO tester la pr sence id POSTI 1411 libelle POST libelle pr paration et ex cution query db gt prepare UPDATE Types SET libelle WHERE _id query gt execute array libelle id NB ici on se ne pr occupe pas de s curit 3En fait un vrai WebService Restful est plus complexe voir wikipedia 91 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 5 4 Exemple de script PHP Get Voici get_all_types php qui retourne tous les n uplets amp connexion au serveur SQL par PDO db new PDO pgsql host hostname dbname dbname login passwd liste de tous les
36. soit on conna t la taille du contenu des le d but appeler setFixedLengthStreamingMode taille e soit on ne la conna t pas ex streaming appeler setChunkedStreamingMode 0 7 2 6 Exemple de requ te POST cb 101 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 URL url new URL http pnerzic fr insert_avis php HttpURLConnection connexion HUC url openConnection try connexion setDoOutput true connexion setRequestMethod POST String params libelle ok amp note 3 5 amp connexion setFixedLengthStreamingMode params length DataQutputStream contenu new DataQutputStream connexion getOutputStream contenu writeBytes params contenu close ventuellement utiliser getInputStream finally connexion disconnect 7 2 7 Requ tes asynchones Comme le serveur peut r pondre avec beaucoup de retard il faut employer une sous classe d AsyncTask Par exemple ceci e Constructeur on lui fournit l URL contacter ainsi que tous les param tres n cessaires ils sont simplement m moris s dans la classe e String doInBackground ouvre la connexion construit et lance la requ te retourne la r ponse du serveur et ferme la connexion e void onPostExecute String reponse traite la r ponse du serveur ou r veille un couteur 7 2 8 Permissions pour l application Pour finir il faut rajouter ceci dans le man
37. 0 13 17 19 19 24 28 30 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 Application liste 45 AL Pr sentations Ll eo Oe ee Oe ADA A a eS 45 12 A Hier dela li a A al Re ETE ean 48 AB APC lts O E O e si A di Mie a EA One 50 4 4 Adaptateur personnalis y 1 AA AA aus SAS 52 4 5 Actions utilisateur sur la liste anus A A A ea AA 57 5 Ergonomie 60 5 1 Barre d action et mens Yer aaa A A ee Abe ae os 60 5 2 Annonces A A NO 64 5 3 Fragments et activit s AA aaa cree Mes cu de ae oe 67 5 4 Preferences application 2 tl 2 erecta de dis rte 74 6 Bases de donn es SQLite3 78 Bole SOLES ts o e ad AS ds WN Gk A la EA 78 6 2 SQLite dans un application Android sif n naa d tient dl 80 6 3 CursorAdapter et Loaders E a A A Se A ta an pe Gee at en 87 64 Content Providers cta Di is db ds DA ri 90 65 WEBBER VICCS m po de ds A di e o e dl ti ns 91 7 Affichage de donn es g olocalis es 95 le Meme EC ai a A SAS 95 12 Requete ELLE A ASIA sl rs 100 ee OpenStreetMap SE A NE Ne 102 8 Dessin 2D interactif 110 SU DESSIN en 2 SR Re a A Re Re D ate doe L e d er 110 8 2 Interactions avec l utilisateur os IA SS A ER AS ee ae le 116 8 3 Botes de dialogue sp cifiques id a ape ia hee eS Rie biG a ee So 117 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 1 Environnement de d veloppement Le cours de cette semaine pr sente l environnement de d veloppement Android
38. 14 15 1 2 5 Plugin de Eclipse Pour finir il faut installer un plugin dans Eclipse Suivre la proc dure expliqu e sur internet Il est d j install PIUT Apr s cette installation il faut indiquer emplacement du SDK dans le plugin pr f rences de Eclipse 1 3 Premi re application 1 3 1 Objectif de la semaine 1 Cette semaine ce sera seulement un aper u rapide des possibilit s e Cr ation d une application Hello World avec un assistant e Tour du propri taire e Ex cution de l application e Mise sous forme d un paquet 1 3 2 Assistant Eclipse Le plugin Eclipse contient un assistant de cr ation d applications New Android Application New Android Application Creates a new Android Application Application Name 6 MementOL Project Name 0 MementOL Package Name 0 fr iutlan games mementol Minimum Required SDK 0 API 14 Android 4 0 IceCreamSandwich v Target SDK 0 API 21 Android 4 X L Preview v Compile With API 16 Android 4 1 Jelly Bean Mi Theme 0 Holo Light with Dark Action Bar v Next gt Cancel Figure 3 Assistant de cr ation de projet 1 3 3 Cr ation d une application Chaque version d Android d not e par son API level apporte des am liorations et supprime des dispositifs obsol tes Toute application exige un certain niveau d API e Minimum SDK il faut au moins cette API car on utilise certain
39. 14 15 6 5 7 Dans l application Android Tout le probl me est de construire une requ te HTTP d attendre la r ponse de la d coder et de l afficher Pour commencer il faut que l application soit autoris e acc der internet Rajouter cette ligne dans le manifeste 4 lt uses permission android name android permission INTERNET gt Ensuite il faut transformer tout ce qui est requ te SQL e Affichage des donn es changer le chargeur de curseur e Modifications des donn es Voyons cela dans l ordre 6 5 8 Affichage d une liste Il suffit de reprogrammer la m thode getAl11Types de la classe TableTypes voir page 84 et 92 t public static Cursor getAllTypes RemoteDatabase bdd requ te Get l aide de la classe RemoteDatabase String jsondata bdd get get all types php null d coder les n uplets et en faire un curseur return bdd cursorFromJSON jsondata new String _id libelle I J ai retir les tests d erreur et traitements d exceptions 6 5 9 La classe RemoteDatabase C est une classe que je vous propose Elle fait un peu tout le caf les croissants C est elle qui organise la communication avec le serveur dont ces m thodes e get script php params appelle le script PHP par un GET en lui passant les param tres indiqu s et retourne un String contenant la r ponse du serveur sous forme de donn es JSON e cursorFromJSON jsondata noms_des_colonnes
40. 2 Cr er un layout pour un item il doit contenir un TextView identifi par Candroid id text1 Consulter la documentation 48 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 2 3 Layout de l activit pour afficher une liste Voici d abord le layout d cran J ai rajout le TextView qui affiche Liste vide Notez les identifiants sp ciaux amp lt LinearLayout xmlns android android orientation vertical android layout_width match_parent android layout_height match_parent gt lt ListView android id android id list android layout_width match_parent android layout_height match_parent gt lt TextView android id Candroid id empty android text Liste vide e lt LinearLayout gt On peut rajouter d autres vues boutons 4 2 4 Mise en place du layout d activit Classiquement amp OOverride protected void onCreate Bundle savedInstanceState appeler la m thode surcharg e dans la superclasse super onCreate savedInstanceState mettre en place le layout contenant le ListView setContentView R layout main initialisation de la liste mListe new ArrayList lt Planete gt 4 2 5 Layout pour un item Ensuite le layout res layout item xml pour afficher un item L identifiant du TextView devient android R id text1 en Java y lt LinearLayout xmlns android android orientation vertical android layout_width match_pare
41. 43 Marqueur personnalis 7 3 12 R action un clic Il est possible de d finir un couteur pour les clics amp mrkIUT setOnMarkerClickListener new OnMarkerClickListener Override public boolean onMarkerClick Marker marker MapView map 106 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Toast makeText MainActivity this marker getSnippet Toast LENGTH_LONG show return false DE Ici je fais afficher le snippet du marqueur dans un Toast 7 3 13 Itin raires Il est tr s facile de dessiner un itin raire sur OSM On donne le GeoPoint de d part et celui d arriv e dans une liste ventuellement des tapes interm diaires amp ilin raire pour aller de la gare L IUT RoadManager manager new OSRMRoadManager ArrayList lt GeoPoint gt etapes new ArrayList lt GeoPoint gt etapes add gpGare etapes add gpIUT Road route manager getRoad etapes ajouter cette route sur la carte sous les marqueurs Polyline ligne RoadManager buildRoadOverlay route this mMap getOverlays add 0 ligne Seul probl me faire cela dans un AsyncTask voir TPS partie 2 7 3 14 Position GPS Un dernier probl me comment lire les coordonn es fournies par le r cepteur GPS Il faut faire appel au LocationManager Ses m thodes retournent les coordonn es g ographiques amp LocationManager LocationManager getSystemService LOCATION SERVICE
42. 5 2 2 Annonces personnalis es Il est possible de personnaliser une annonce Il faut seulement d finir un layout dans res layout toast_perso xml La racine de ce layout doit avoir un identifiant ex toast _ perso _id qui est mentionn dans la cr ation amp expanser le layout du toast LayoutInflater inflater getLayoutInflater View layout inflater inflate R layout toast_perso ViewGroup findViewById R id toast_perso_id creer le toast et tT af cken Toast toast new Toast getApplicationContext toast setDuration Toast LENGTH_LONG toast setView layout toast show 64 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 2 3 Dialogues Un dialogue est une petite fen tre qui appara t au dessus d un cran pour afficher ou demander quelque chose d urgent l utilisateur par exemple une confirmation Vous confirmez la suppression de l l ment 6 Annuler OK Figure 33 Dialogue d alerte Il existe plusieurs sortes de dialogues e Dialogues d alerte e Dialogues g n raux 5 2 4 Dialogue d alerte Un dialogue d alerte AlertDialog affiche un texte et un trois boutons au choix ok annuler oui non aide Un dialogue d alerte est construit l aide d une classe nomm e AlertDialog Builder Le principe est de cr er un builder et c est lui qui cr e le dialogue Voici le d but amp Builder confirm new AlertDialog Build
43. 8 1 9 Shaders suite et fin Le d grad pr c dent est base sur trois couleurs situ es aux extr mit s et au centre du rectangle On fournit donc deux tableaux l un pour les couleurs et l autre pour les positions des couleurs relativement au d grad de 0 0 1 0 Le d grad poss de une dimension 100 pixels de large Si la figure dessiner est plus large la couleur sera maintenue constante avec l option CLAMP D autres options permettent de faire un effet miroir MIRROR ou red marrer au d but REPEAT Cette page pr sente les shaders et filtres d une mani re extr mement int ressante Comme vous verrez il y un grand nombre de possibilit s 8 1 10 Quelques remarques Lorsqu il faut redessiner la vue appelez invalidate Si la demande de r affichage est faite dans un autre thread alors il doit appeler postInvalidate La technique montr e dans ce cours convient aux dessins relativement statiques mais pas un jeu par exemple Pour mieux animer le dessin il est recommand de sous classer SurfaceView plut t que View Les dessins sont alors faits dans un thread s par et d clench s par des v nements 8 1 11 Dessinables Les canvas servent dessiner des figures g om triques rectangles lignes etc mais aussi des Drawable c est dire des choses dessinables telles que des images bitmap ou des formes quelconques Il existe beaucoup de sous classes de Drawable Un Drawable est cr
44. DK Y Not installed 7 SDK Platform Not installed W amp Samples for SDK Y Not installed 7 d ARM EABI v7a System Image Y Not installed Y Ep Google APIs by Google Inc Y Not installed V Sources for Android SDK Y Not installed F G Android 4 0 API 14 El 2 Android 3 2 API13 D G Android 31 API12 Lia Andeniel INA ADT111 Show V Updates New Y Installed Obsolete Select New or Updates Sort by API level Repository Deselect All Done leading packages Figure 2 Gestionnaire de paquets Android 1 2 3 Choix des l ments du SDK T l charger le SDK correspondant au syst me d exploitation Ce SDK contient un gestionnaire SDK Manager Le gestionnaire permet de choisir quelles versions d Android installer parmi e Android 5 0 1 API 21 e Android 4 4W 2 API 20 e Android 1 5 API 3 Choisir celles qui correspondent aux tablettes qu on vise 1 2 4 Dossiers du SDK Le gestionnaire t l charge environ 800Mo de fichiers e SDK Tools indispensable contient le gestionnaire e SDK Platform tools indispensable contient adb e SDK Platform indispensable contient les librairies e System images pour cr er des AVD e Android Support divers outils pour cr er des applications e Exemples et sources C est d j install PIUT 2versions existantes la date de r daction de ce cours IUT de Lannion P Nerzic Dept Informatique Programmation Android 20
45. HttpURLConnection connexion HttpURLConnection url openConnection connexion setReadTimeout 10000 connexion setRequestProperty User Agent Mozilla 5 0 try InputStream reponse connexion getInputStream int code connexion getResponseCode utiliser new BufferedInputStream reponse catch IOException e mauvais URL pb r seau ou serveur inactif finally connexion disconnect 7 2 4 Encodage de param tres pour une requ te Les param tres d une requ te GET ou POST doivent tre encod s cf wikipedia Les couples nom1 val1 nom2 val2 deviennent nomi vali amp nom2 val2 Dedans les espaces sont remplac s par et les caract res bizarres par leur code UTF8 ex devient C3 A9 On utilise la m thode URLEncoder encode cha ne charset amp String params libelle URLEncoder encode libelle UTF 8 Sauteur URLEncoder encode auteur UTF 8 Voir le TP7 pour une implantation plus polyvalente boucle sur un ContentValues 7 2 5 Principe de programmation pour un POST Un POST est un peu plus complexe car il faut encoder un corps de requ te Le d but est similaire une requ te GET mais ensuite 1 Configurer en mode POST 2 Fournir un contenu avec getOutputStream 3 optionnel Lire la r ponse avec getInputStream 4 D connecter afin de lib rer la connexion Le contenu est placer dans le flux d sign par getOutputStream mais avant e
46. ID RUNTIME Surface Manager SQLite Core Libraries ONGLES We Mie OpenGL ES WebKit Machir LINUX KERNEL Flash Memory Binder IPC Display Driver Driver Driver Camera Driver Audio Key Driver WiFi Driver s eypad Driver ViFi Drive Drivers Figure 1 Constituants d Android e Fichiers de donn es suppl mentaires e Manifeste description du contenu du logiciel fichiers pr sents dans l archive demandes d autorisations signature des fichiers dur e de validit etc Eclipse g re l ensemble automatiquement gr ce un plugin li au SDK Android 1 2 SDK Android et Plugin Eclipse 1 2 1 SDK Android Le SDK contient e les librairies Java pour cr er des logiciels e les outils de mise en bo te des logiciels e un mulateur de tablettes pour tester les applications AVD e un outil de communication avec les vraies tablettes ADB Eclipse contient e un plugin qui g re le SDK et les tablettes connect es 1 2 2 SDK Manager Le SDK est livr avec un gestionnaire C est une application qui permet de choisir les composants installer Voir la figure 2 page 5 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Packages Tools SDK Path C Program Files x86 Android android sdk Packages Name a WILD Tools 7 X Android SDK Tools Bb Installed F ik Android SDK Platfarm tools Y Not installed a W Android 4 0 3 API15 Y E Documentation for Android S
47. Lite dans un application Android 6 2 1 Bases de donn es Android Chaque application peut cr er une base de donn es C est un fichier db plac dans le dossier data data PAQUETAGE databases NOM_BDD Vous pourrez changer ce fichier avec le PC adb push ou pull Consulter cette page pour des d tails sur la marche a suivre Dans une application Android ces fichiers sont manipul s l aide de classes de l APT NB ce cours commence par une grande simplification l ouverture d une BDD Lisez la totalit pour savoir comment on proc de en r alit 6 2 2 Classes pour travailler avec SQLite Il faut connaitre au moins deux classes e SQLiteDatabase elle repr sente une BDD Ses m thodes permettent d ex cuter une requ te par exemple void execSQL String sql pour CREATE ALTER DROP qui ne retournent pas de donn es Cursor rawQuery String sql pour des SELECT qui retournent des n uplets D autres m thodes pour des requ tes sp cialis es e Cursor repr sente un n uplet Il y a des m thodes pour r cup rer les colonnes Voyons les d tails 6 2 3 Principes Voici les tapes du travail avec une BDD en Java 1 Ouverture de la base cr ation du fichier si besoin SQLiteDatabase bdd bdd SQLiteDatabase open0rCreateDatabase 2 Ex cution de requ tes 1 Obtention d un Curseur sur le r sultat des select Cursor cursor bdd rawQuery requete 2 Parcours des n up
48. Planete gt for int i 0 i lt noms length i mListe add new Planete noms i distances i 4 1 9 Remarques Cette semaine les donn es sont repr sent es dans un tableau Dans les exemples pr c dents c est une variable membre de l activit Pour faire mieux que cela il faut d finir une Application comme en semaine 3 et mettre ce tableau ainsi que son initialisation dedans Ainsi le tableau devient disponible dans toutes les activit s de application Voir le TP4 En semaine 6 nous verrons comment utiliser une base de donn es SQL locale ou un WebService ce qui r soud proprement le probl me 4 2 Affichage de la liste 4 2 1 Activit sp cialis e ou layout Deux possibilit s e employer la classe ListActivity e employer la classe Activity de base Ces deux possibilit s sont tr s similaires un layout contenant un ListView pour l activit un layout pour les items de la liste et un adaptateur pour acc der aux donn es La ListActivity pr pare un peu plus de choses pour g rer les s lections d items tandis qu avec une simple Activity c est nous de tout faire voir page 57 Par exemple si on rajoute un TextView particulier on peut avoir un message La liste est vide 4 2 2 Mise en uvre Que ce soit avec une ListActivity ou avec une Activity de base deux choses sont faire 1 Cr er un layout pour l cran il doit contenir un ListView identifi par Candroid id list
49. Programmation mobile avec Android Pierre Nerzic pierre nerzic univ rennes1 fr f vrier mars 2015 Abstract Il s agit des transparents du cours mis sous une forme plus facilement imprimable et lisible Ces documents ne sont pas totalement libres de droits Ce sont des supports de cours mis votre disposition pour vos tudes sous la licence Creative Commons Attribution Pas d Utilisation Commerciale Partage dans les M mes Conditions 4 0 International Version du 11 06 2015 at 12 16 Table des mati res 1 Environnement de d veloppement LL Tntrod ction aa k a Gow AR DAR a O RE e IR k 1 2 SDK Android et Plugin Eclipse 9 ee a eee a aa Ro 1 3 Premi re application 4 2 04 248544426 4 4e8 26 bee side des EG SESS 1 4 Premi re ex cution ny E ees Se Bh A AAA 1 5 Communication AVD Eclipse 4 4 ke ee Be OO ERG A ss 1 6 Cr ation d un paquet installable 2 Cr ation d interfaces utilisateur 2 1 nterface et ressources ras ea a Ad BODE ARSE 2 2 Dispositions lt esws t sadua e AN E AAA 2 3 Composants d interface Le oaoa re ea AAA a A 2A OVES 2 te Re ee a ee eee e ee eee ee ee 3 Vie d une application 3 1 Applications et activit s lt 4 a e400 amp 88 LA RASE LE RAGE Get ad 440 32 Applications Las a ss set e Ts STD Id TND TR et De ESE OR dede da 33 GNI a o No E O e Roe oR Po 3 4 Vues el activit s 2 aoe a ae Poe ia diem Se a ar os D A CC 1
50. QLiteDatabase bdd super context this bdd bdd ODverride 89 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 protected Cursor onLoadInBackground 4 return TableTypes getAl1Types bdd i Voir page 84 pour la m thode getAllTypes elle fait seulement return bdd rawQuery SELECT FROM Types null 6 3 8 Callback onLoadFinished de l activit Pour finir la callback qui est appel e lorsque les donn es sont devenues disponibles elle met jour l adaptateur ce qui affiche les n uplets dans la liste L autre callback est appel e si le chargeur doit tre supprim On met donc toujours ceci amp Override public void onLoadFinished Loader lt Cursor gt loader Cursor cursor adapter changeCursor cursor Override public void onLoaderReset Loader lt Cursor gt loader adapter changeCursor null 6 3 9 Mise jour de la liste Quand il faut mettre jour la liste si les donn es ont chang il faut relancer le chargeur de curseur et non pas l adaptateur Cela se fait de la mani re suivante amp le chargeur doit recommencer son travail getLoaderManager restartLoader LOADER ID null this 6 4 ContentProviders 6 4 1 Pr sentation rapide Les Fournisseurs de contenu sont des sortes de tables de donn es disponibles d une application l autre et accessibles l aide d un URI g n ralisation d un URL Un exemple est le carnet
51. _id new String Long toString id try d 83 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 if cursor moveToFirst amp amp cursor isNull 0 4 return cursor getString 0 else return null finally cursor close 6 2 14 Autre type de requ te Cette autre m thode retourne non pas une valeur mais directement un curseur Elle est utilis e pour afficher tous les l ments de la table dans une liste voir page 89 public static Cursor getAllTypes SQLiteDatabase bdd return bdd rawQuery SELECT FROM Types null Attention votre application doit prendre soin de fermer ce curseur d s qu il ne sert plus ou alors de le fournir un objet ex un adaptateur qui sait le fermer automatiquement 6 2 15 M thodes query Android propose galement des m thodes pratiques pour effectuer des requ tes telles que query String table String columns String selection String selectionArgs String groupBy String having String orderBy String limit mais je ne vois pas l int r t de recoder en Java ce qui se fait parfaitement en SQL sans compter les risques d erreur si on permute involontairement les param tres de ces m thodes 6 2 16 Ouverture d une base Revenons vers les aspects gestion interne de la base de donn es L ouverture d une base se fait ainsi y to String dbpath this getFilesDir getPath concat test db SQLiteDatab
52. alider Button btnValider Button dialog findViewById R id dialog btn_valider btnValider setOnClickListener new OnClickListener Override public void onClick View v dialog dismiss fermer le dialogue i r afficher le dialogue dialog show 5 3 Fragments et activit s 5 3 1 Fragments Depuis Android 4 les dialogues doivent tre g r s par des instances de DialogFragment qui sont des sortes de fragments voir cette page Cela va plus loin que les dialogues Toutes les parties des interfaces d une application sont susceptibles de devenir des fragments e liste d items e affichage des infos d un item e dition d un item Un fragment est une sorte de mini activit Dans le cas d un dialogue elle g re l affichage et la vie du dialogue Dans le cas d une liste elle g re l affichage et les s lections des l ments 5 3 2 Tablettes smartphones Une interface devient plus souple avec des fragments Selon la taille d cran on peut afficher une liste et les d tails ou s parer les deux Voir la figure 35 page 68 5 3 3 Structure d un fragment Un fragment est une activit tr s simplifi e C est seulement un arbre de vue d fini par un layout et des couteurs Un fragment minimal est amp public class InfosFragment extends Fragment public InfosFragment 67 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Tablet Handset Selecting an item Sel
53. anvas avec la couleur indiqu e Cette couleur est un code 32 bits retourn par la classe statique Color Color BLACK Color RED couleurs pr d finies Color rgb int r int v int b convertit des composantes RVB 0 255 en un code de couleur e drawLine float x1 float y1 float x2 float y2 Paint peinture trace une ligne entre x1 y1 et x2 y2 avec la peinture e drawCircle float cx float cy float rayon Paint paint dessine un cercle e etc 8 1 5 Peinture Paint Cette classe permet de repr senter les modes de dessin couleurs de trac de remplissage polices lissage C est extr mement riche Voici un exemple d utilisation amp 111 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 mPeinture new Paint Paint ANTI ALIAS FLAG mPeinture setColor Color rgb 128 255 32 mPeinture setAlpha 192 mPeinture setStyle Paint Style STROKE mPeinture setStrokeWidth 10 Il est pr f rable de cr er les peintures dans le constructeur de la vue ou une autre m thode mais surtout pas dans la m thode onDraw 8 1 6 Quelques accesseurs de Paint Parmi la liste de ce qui existe on peut citer e setColor Color setARGB int a int r int v int b setAlpha int a d finissent la couleur et la transparence de la peinture e setStyle Paint Style style indique ce qu il faut dessiner pour une forme telle qu un rectangle ou un cercle Paint Style STROKE uniqu
54. aquet Un paquet Android est un fichier apk C est une archive sign e authentifi e contenant les binaires ressources compress es et autres fichiers de donn es La cr ation est relativement simple avec Eclipse 1 Menu contextuel du projet Export choisir Export Android Application 2 Eclipse v rifie que le projet tient la route 3 Signer le paquet l aide d une cl priv e 4 D finir l emplacement du fichier apk On r cup re un fichier apk dans le dossier sp cifi 1 6 2 Signature d une application Lors de la mise au point Eclipse g n re une cl qui ne permet pas d installer l application ailleurs Pour distribuer une application il faut une cl priv e Les cl s sont stock es dans un keystore trousseau de cl s Il faut le cr er la premi re fois C est un fichier crypt prot g par un mot de passe ranger soigneusement Ensuite cr er une cl priv e e alias nom de la cl mot de passe de la cl e informations personnelles compl tes pr nom nom organisation adresse etc Les mots de passe du trousseau et de la cl seront demand s chaque cr ation d un apk 1 6 3 Cr ation du keystore Voir la figure 16 page 18 1 6 4 Cr ation d une cl Voir la figure 17 page 18 1 6 5 Et voil C est fini pour cette semaine rendez vous la semaine prochaine pour un cours sur les interfaces Android 17 IUT de Lannion P Nerzic Dept Informatique Progra
55. ar paquetage ressources fichiers XML et images de l interface gen sources construits a partir des ressources bin binaires venant de la compilation des sources libs et Android archives jar utilis es par le projet AndroidManifest xml description de l application Eclipse rajoute aussi des fichiers sp cifiques project properties settings NB on ne va pas chercher comprendre a cette semaine T IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 1 3 7 Fen tre Package Explorer H Package Explorer Ez Outline CI hs E Y HelloWorld B src EY fr iutlan helloworld D MainActivity java E s gen Generated Java Files El Android 4 1 2 BA Android Private Libraries Ea assets amp bin amp libs Gores d AndroidManifest xml E proguard project txt project properties Figure 5 l ments d un projet Android 1 3 8 diteurs sp cifiques Eclipse fournit des diteurs sp cialis s pour les fichiers XML par exemple e Formulaires pour AndroidManifest xml sp cification de l application res values strings xml textes de l interface e diteurs graphiques pour res layout xml disposition des contr les sur l interface 1 3 9 Exemple AndroidManifest xml Voir la figure 6 page 9 1 3 10 Exemple res layout main xml Voir la figure 7 page 9 1 3 11 Source XML sous jacent Ces diteurs sont plus confortabl
56. artir de bash amp bash sqlite3 test db sqlite gt CREATE TABLE Avis _id INTEGER PRIMARY KEY AUTOINCREMENT idType INTEGER NOT NULL description TEXT NOT NULL note REAL FOREIGN KEY idType REFERENCES Types _id sqlite gt INSERT INTO Avis VALUES 1 0 KassKrout 3 5 6 1 2 SQLite3 SQLite3 est un vrai SGBD relationnel SQL mais simplifi pour tenir sur une tablette Ce qui lui manque e Aucune gestion des utilisateurs autorisations pas de s curit e Pas de r glages pour am liorer les performances car e Peu de types de donn es ex date entier ou cha ne un seul type d entiers SQLite3 fonctionne sans serveur Il stocke ses donn es dans un seul fichier Ce fichier est portable c est dire copiable sur n importe quelle autre machine 78 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 1 3 Exemples SQL Toutes les requ tes SQL que vous connaissez fonctionnent p ex amp SELECT COUNT FROM Avis WHERE description LIKE rest SELECT FROM Avis WHERE note gt 2 0 ORDER BY note SELECT idType AVG note FROM Avis GROUP BY idType DELETE FROM Avis WHERE note IS NULL ALTER TABLE Avis ADD COLUMN date INTEGER UPDATE Avis SET date strftime s now DROP TABLE Avis Jointures groupements requ tes imbriqu es transactions index triggers tout cela existe Consulter la documentation 6 1 4 Autres usages de SQLite3 Ce SGBD est utilis dan
57. ase bdd SQLiteDatabase open0rCreateDatabase dbpath null NB cela ne cr e pas les tables seulement le fichier qui contient la base Il faut fournir le chemin d acc s a la base Mais en faisant ainsi la base est cr e dans data data package files et non pas databases Voir page 85 pour la v ritable fa on de faire 84 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 2 17 Exceptions sur la base Si vous ouvrez la base pour toute la vie de l activit dans onCreate alors vous devez la fermer dans la m thode onDestroy amp private SQLiteDatabase bdd void onCreate bdd SQLiteDatabase openOrCreateDatabase void onDestroy bdd close 6 2 18 Premi re ouverture et ouvertures suivantes Ensuite apr s avoir ouvert la base si c est la premi re fois il faut cr er les tables Cependant a cause une erreur de cr er une table qui existe d j et il serait co teux de tester l existence des tables Une possibilit consiste rajouter IF NOT EXISTS la requ te de cr ation Par exemple amp bdd execSQL CREATE TABLE IF NOT EXISTS NomTable Id INTEGER PRIMARY KEY AUTOINCREMENT Libelle TEXT NOT NULL Un autre probl me c est la mise jour de l application Qu allez vous proposer vos clients si vous changez le sch ma de la base entre la V1 et la V2 la V2 et la V3 6 2 19 Un helper pour g rer l ouverture cr at
58. ask affiche les r sultats sur l interface ou appelle un couteur 7 1 4 Structure d une AsyncTask Une t che asynchrone est d finie par plusieurs m thodes Constructeur permet de passer des param tres la t che onPreExecute Initialisation effectu e par le thread principal p ex elle affiche une barre d avancement ProgressBar doInBackground C est le corps du traitement Cette m thode est lanc e dans son propre thread Son r sultat est fourni onPostExecute onProgressUpdate Cette m thode permet de mettre jour l interface p ex la barre d avancement Pour a doInBackground doit appeler publishProgress onPostExecute Elle est appel e quand l AsyncTask a fini par exemple pour cacher la barre d avancement mettre jour les donn es sur l interface 7 1 5 Sch ma r capitulatif Thread principal Thread priv Constructeur onPreExecute dolnBackground onPostExecute publishProgress onProgressUpdate Figure 41 M thodes d un AsyncTask 7 1 6 Param tres d une AsyncTask Ce qui est difficile comprendre c est que AsyncTask est une classe g n rique comme ArrayList Elle est param tr e par trois types de donn es AsyncTask lt Params Progress Result gt e Params est le type du param tre de doInBackground e Progress est le type du param tre de onProgressUpdate e Result est le type du param tre de onPostExecute qui est aussi le type du r sultat de doInBackgroun
59. ate a PlaneteView create fait instancier item xml une sous classe de RelativeLayout appel e PlaneteView b Cela cr e les vues nom distance et image dont PlaneteView findViews r cup re les objets Java 3 L adaptateur appelle la m thode display du PlaneteView avec les donn es afficher a PlaneteView display appelle setText des vues pour afficher les valeurs 4 4 14 Le r sultat Voir la figure 27 page 57 96 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Figure 27 Liste d items 4 5 Actions utilisateur sur la liste 4 5 1 Modification des donn es Les modifications sur les donn es doivent se faire par les m thodes add insert remove et clear de Vadaptateur Voir la doc Si ce n est pas possible par exemple parce qu on a chang d activit et modifi les donn es sans adaptateur alors au retour par exemple dans onActivityResult il faut pr venir l adaptateur par la m thode suivante 4 adapter notifyDataSetChanged 4 5 2 Clic sur un l ment Voyons le traitement des s lections utilisateur sur une liste La classe ListActivity d finit d j un couteur pour les clics Il suffit de le surcharger 4 ODverride public void onListItemClick ListView 1 View v int position long id g rer un clic sur 1 item identifi par id Par exemple cr er un Intent pour afficher ou diter l item Ne pas oublier d appeler adapter notifyDataSetChanged
60. auncher 62 8603 android process acore 92 8604 com android inputmethod latin 19 l 8605 com android calendar 15 8606 system_process 49 8607 com android settings 43 i 8608 com android providers calendar 46 8609 com android contacts 01 8610 android process media 20 8611 com android mms 40 8612 com android email 66 8613 com android exchange i 83 i 8614 Figure 12 Liste des AVD et tablettes connect es 1 5 3 Fen tre File Explorer Voir la figure 13 page 14 1 5 4 Fen tre Console Eclipse affiche des messages g n raux dans la fen tre Console Voir la figure 14 page 14 D marrage d un AVD installation lancement d une application 13 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 E Proble Javad Declar EJ Consol LogCa Device i FileEx X E Ra d Name Size Date Time Permissions Info o acct 2015 01 18 11 31 drwxr xr x cache 2015 01 17 18 24 drwxrwx amp config 2015 01 18 11 31 dr x d 2015 01 18 11 31 Irwxrwxrwx gt sys kernel debug 3 data 2015 01 17 10 33 drwxrwx x default pro 116 1970 01 01 01 00 rw r r 2 dev 2015 01 18 11 32 drwxr xr x etc 2015 01 18 11 31 Irwxrwxrwx gt system etc init 105204 1970 01 01 01 00 rwxr x init goldfish 2344 1970 01 01 01 00 rwxr x init rc 17057 1970 01 01 01 00 rwxr x inittrace rc 1637 1970 01 01 01 00 rwxr x init usb rc 3915 1970 01 01 01 00 rwxr x
61. ayout height wrap content android text string valider android onClick Valider gt Il faut d finir la m thode Valider dans l activit y public void Valider View btn 3 4 4 D finition d un couteur Il y a une autre mani re de d finir une r ponse un clic un couteur listener C est une instance de classe qui poss de la m thode public void onClick View v ainsi que sp cifi par l interface View OnClickListener Cela peut tre e une classe priv e anonyme e une classe priv e ou public dans l activit e l activit elle m me Dans tous les cas on fournit cette instance en param tre la m thode setOnClickListener du bouton amp btn setOnClickListener ecouteur 3 4 5 Ecouteur priv anonyme Il s agit d une classe qui est d finie la vol e lors de l appel setOnClickListener Elle ne contient qu une seule m thode amp Button btn Button findViewById R id btn_valider btn setOnClickListener new View OnClickListener public void onClick View btn faire quelque chose DE Employer la syntaxe MonActivity this pour manipuler les variables et m thodes de l activit sous jacente 42 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 4 6 couteur priv Cela consiste d finir une classe priv e dans l activit cette classe impl mente l interface OnClickListener et en fournir une in
62. blue mColor DE Elle change seulement la composante rouge de la variable mColor Il y a les m mes choses pour le vert le bleu et la transparence 8 3 8 Utilisation du dialogue Pour finir voici comment on affiche ce dialogue par exemple dans un menu amp new ColorPickerDialog new ColorPickerDialog 0nColorChangedListener OOverride public void colorChanged int color 77 Ubiliser La Couleur show getFragmentManager fragment_colorpicker Cela consiste d finir un couteur qui re oit la nouvelle couleur du s lecteur L couteur peut la transmettre la classe qui dessine une nouvelle figure 119 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 8 3 9 S lecteur de fichier Dans le m me genre mais nettement trop complexe il y a le s lecteur de fichiers pour enregistrer un dessin Choisissez un fichier images Nom du fichier dossier parent dessin2 fichier dessin1 fichier Annuler Figure 51 S lecteur de fichier 8 3 10 C est la fin C est fini nous avons tudi tout ce qu il tait raisonnable de faire en 8 semaines 120 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 Liste des figures 0 I ow A 0 N e D www NN WD NN N NY DN NY DN NN N Rh A KS Aa A pa Aa pa papa D wo e O N Q q WO WD e O OON O a BA O N M O Constituants GAUGING 4 RA EG ROG Ra OEE AEE Gestio
63. cha nes c est getString identifiant d faut String hostname prefs getString prefs_hostname localhost Pour les entiers il y a bug important f vrier 2015 La m thode getInt plante Voir stackoverflow pour une solution Sinon il faut passer par une conversion de cha ne en entier amp int nbmax prefs getInt prefs_nbmax 99 PLANTE int nbmax Integer parselnt prefs getString prefs nbmax 99 5 4 7 Modification des pr f rences par programme Il est possible de modifier des pr f rences par programme dans la base SharedPreferences l aide d un objet appel editor qui poss de des setters Les modifications font partie d une transaction comme avec une base de donn es Voici un exemple amp 76 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 d but d une transaction SharedPreferences Editor editor prefs edit modifications editor putBoolean prefs online false editor putInt prefs_nbmax 20 fin de la transaction editor commit 5 4 8 Affichage des pr f rences Il faut cr er une activit toute simple 4 public class PrefsActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout prefs_activity Le layout prefs_activity xml contient seulement un fragment amp lt fragment xmlns android android id id frag prefs
64. cks pour g rer les menus cr ation et activation 5 1 3 Sp cification d un menu Cr er res menu nom du menu xml y lt menu xmlns android gt lt item android id id menu creer android icon drawable ic menu creer android showAsAction ifRoom android title string menu_creer gt 60 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt item android id id menu_chercher gt lt menu gt Chaque lt item gt identifiant ic ne et titre ainsi que l attribut showAsAction valant always ifRoom ou never selon la visibilit qu on souhaite dans la barre d action 5 1 4 Ic nes pour les menus Android distribue gratuitement un grand jeu d ic nes pour les menus dans les deux styles HoloDark et HoloLight A EE ION A Eea DARDO TAPAS 2M SR A4 e Oe ge AC BCS MCL2L0LBEa7 O AtO ORXON Y o E all Y Lo me lt RRE ES D D 7 LSAERXALITEmOS CI Aree eaMuUeOea gt ODA AN Ha lt A R O020m E Figure 30 Ic nes de menus Consulter la page Downloads pour des t l chargements gratuits de toutes sortes de mod les et feuilles de styles T l chargez Action Bar Icon Pack pour am liorer vos applications 5 1 5 Th me pour une barre d action Les th mes permettent d afficher soit une barre d action soit un menu ancien style Ils sont d finis dans trois dossiers e res values st
65. d NB a ne peut tre que des classes donc Integer et non pas int et Void au lieu de void dans ce dernier cas faire return null 96 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 7 1 7 Exemple de param trage Soit une AsyncTask pour chercher l identifiant du meilleur avis concernant un libell Le travail va consister parcourir les n uplets un par un La t che re oit un String en param tre publie r guli rement le pourcentage d avancement un entier et retourne un Long Cela donne cette instanciation du mod le g n rique class MyTask extends AsyncTask lt String Integer Long gt et ses m thodes sont param tr es ainsi Long doInBackground String libelle void onProgressUpdate Integer pourcentage void onPostExecute Long resultat 7 1 8 Param tres variables Alors en fait c est encore plus complexe car doInBackground re oit non pas un seul mais un nombre quelconque de param tres tous du m me type La syntaxe Java utilise la notation pour signifier qu en fait c est un tableau de param tres Long doInBackground String libelles Ca veut dire qu on peut appeler la m me m thode de toutes ces mani res doInBackground doInBackground Le Hobbit doInBackground Le Hobbit Le Silmarillion null Le param tre libelles est quivalent un String qui contiendra les param tres 7 1 9 D finition d une AsyncTask Il faut d river et
66. d un RelativeLayout Pour bien utiliser un RelativeLayout il faut commencer par d finir les vues qui ne d pendent que des bords du Layout celles qui sont coll es aux bords ou centr es lt TextView android id id titre android layout_alignParentTop true android layout_alignParentRight true android layout_alignParentLeft true gt Puis cr er les vues qui d pendent des vues pr c dentes lt EditText android layout below id titre android layout_alignParentRight true android layout_alignParentLeft true gt Et ainsi de suite 2 2 15 Autres groupements Ce sont les sous classes de ViewGroup galement pr sent es dans cette page Impossible de faire Pinventaire dans ce cours C est vous d aller explorer en fonction de vos besoins 2 3 Composants d interface 2 3 1 Vues Android propose un grand nombre de vues d couvrir en TP e Textes titres saisies e Boutons cases cocher e Curseurs Beaucoup ont des variantes Ex saisie de texte n de t l phone ou adresse ou texte avec suggestion ou Consulter la doc en ligne de toutes ces vues On les trouve dans le package android widget A noter que les vues voluent avec les versions d Android certaines changent d autres disparaissent 28 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 2 3 2 Text View Le plus simple il affiche un texte statique comme un titre Son libell est dans
67. d adresse de votre t l phone D autres applications que la t l phonie peuvent y avoir acc s Un ContentProvider poss de diff rentes m thodes ressemblant celles des bases de donn es e query retourne un Cursor comme le fait un SELECT e insert update delete modifient les donn es e D autres m thodes permettent de consulter le type MIME des donn es Comme c est tr s compliqu mettre en uvre et que a ressemble une simple table SQL sans jointure on n en parlera pas plus ici 90 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 5 WebServices 6 5 1 Echange entre un serveur SQL et une application Android On arrive au plus int ressant faire en sorte qu une application Android stocke ses donn es sur un serveur distant Pour commencer r visez vos cours de Web Design PHP PDO Soit un serveur HTTP connect une base de donn es PostgreSQL en TP Ce serveur poss de des scripts PHP qui vont r pondre aux demandes de l application Android l aide d au moins deux types d changes HTTP e Les SELECT vont tre trait es par des GET e Les INSERT UPDATE DELETE vont tre envoy s par des POST Chaque requ te sera associ e un script sp cifique 6 5 2 Principe g n ral Soit la requ te SELECT FROM Types WHERE _id 3 On va envoyer l identifiant 3 sur le r seau et c est un script PHP qui va effectuer la requ te Il y a un script par sorte de
68. de CursorLoader qui effectue la requ te SQL e D finir trois callbacks onCreateLoader retourne un MonCursorLoader onLoadFinished et onLoaderReset re oivent un curseur jour et mettent jour Vadaptateur Voici le d tail 6 3 3 Activit ou fragment d affichage d une liste Cette activit h rite de ListActivity ou ListFragment et elle impl mente les m thodes d un chargeur de curseur amp public class MainActivity extends ListActivity implements LoaderManager LoaderCallbacks lt Cursor gt private MySQLiteHelper helper private SQLiteDatabase bdd private SimpleCursorAdapter adapter Override protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main 6 3 4 Cr ation d un adaptateur de curseur a ressemble l adaptateur d un tableau mais on fournit deux listes les noms des colonnes et les identifiants des vues dans lesquelles il faut mettre les valeurs amp cr er un adaptateur curseur liste adapter new SimpleCursorAdapter this layout des l ments de la liste android R layout simple_list_item_2 le curseur sera charg par le loader null champs afficher 88 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 new String TableTypes Id TableTypes Libelle identifiants des TextView qui affichent les champs new int android R id text1 android R id tex
69. de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Vous pouvez rajouter ce que vous voulez autour 7 3 6 Activit pour une carte OSM Tr s simple galement voici la m thode onCreate minimale private MapView mMap verride protected void onCreate Bundle savedInstanceState mise en place de l interface super onCreate savedInstanceState setContentView R layout main activity rajouter les contr les utilisateur mMap MapView findViewById R id map mMap setMultiTouchControls true mMap setBuiltInZoomControls true 7 3 7 Positionnement de la vue Pour modifier la vue initiale de la carte il faut faire appel au IMapController associ la carte 4 r cup rer le gestionnaire de carte cam ra IMapController mapController mMap getController d finir la vue initiale mapController setZoom 14 mapController setCenter new GeoPoint 48 745 3 455 Un GeoPoint est quivalent un LatLng de GoogleMaps 7 3 8 Calques Les ajouts sur la carte sont faits sur des overlays Ce sont comme des calques Pour ajouter quelque chose il faut cr er un Overlay lui rajouter des l ments et ins rer cet overlay sur la carte Il existe diff rents types d overlays p ex e ScaleBarOverlay rajoute une chelle e ItemizedIconOverlay rajoute des marqueurs e RoadOverlay Polyline rajoute des lignes Par exemple pour rajouter un indicateur d chelle de la carte
70. de VirtualBox et VMware mais bas e sur QEMU QEMU est en licence GPL il permet d muler toutes sortes de CPU dont des ARM7 ceux qui font tourner la plupart des tablettes Android 1 4 2 Assistant de cr ation d une tablette virtuelle Voir la figure 8 page 11 1 4 3 Caract ristiques d un AVD e Device mod le de tablette qui est simul Nexus ou autre e Target niveau d API Android e CPU ABI processeur ARM7 sur Linux et ATOM sur Windows e Skin Skin with dynamic hardware controls e Memory peut tre limit par votre PC e Internal storage capacit de la m moire flash interne e SD Card capacit de la carte SD simul e suppl mentaire optionnelle e Snapshot m morise l tat de la machine d un lancement l autre mais exclut Use Host GPU e Use Host GPU acc l re les dessins 2D et 3D l aide de la carte graphique du PC 1 4 4 Lancement d une application Bouton bleu pour d boguer rouge pour ex cuter Voir la figure 9 page 11 10 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 Galaxy Nexus 4 65 720 x 1280 xhdp Android 4 1 2 API Level 16 v RM armeabi v Figure 8 Cr ation d un AVD Figure 9 Barre d outils pour lancer une application 11 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Run As Select a way to run MementOL fal Android Application An
71. droid JUnit Test F3 Java Applet ES Java Application Ju JUnit Test Description Runs an Android Application Cancel OK Figure 10 Lancer en tant qu application Android 1 4 5 Lancement d une application suite Voir la figure 11 page 12 1 4 6 Application sur l AVD 5554 Android412 HelloWorld Hello world Figure 11 R sultat sur PAVD 1 4 7 Contr le de PAVD Pour simuler les boutons d une vraie tablette F2 affiche le menu de l application esc retour en arri re home retour l cran d accueil 12 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 ctrl F11 rotation paysage portrait NB la touche 7 du pav num rique fait aussi basculer l cran 1 5 Communication AVD Eclipse 1 5 1 Fen tres Android Le plugin d Eclipse d finit plusieurs nouvelles fen tres Devices Liste des tablettes r elles et virtuelles connect es File Explorer Gestionnaire de fichiers LogCat Affiche tous les messages mis par la tablette courante celle qui est s lectionn e dans Devices On les fait afficher par le menu Window Show View Other 1 5 2 Fen tre Devices amp Proble Javad e Declar El Consol LogCa Device X File Ex 8 1000 1373 aer Name amp E Android412 emulator 5554 Android41 2 4 1 2 debug com android systemui 05 im 8600 com android deskclock 41 8601 com android phone 53 i 8602 com android l
72. e ArrayAdapter lt Planete gt adapter new ArrayAdapter lt Planete gt this android R layout simple list item _ 1 android R id texti mListe associer la liste affich e et l adaptateur setListAdapter adapter Le style d affichage est minimaliste seulement la liste des noms On ne peut pas afficher deux informations avec un ArrayAdapter 4 4 Adaptateur personnalis 4 4 1 Classe Adapter personnalis e Parce que ArrayAdapter n affiche qu un seul texte nous allons d finir notre propre adaptateur PlaneteAdapter Il faut le faire h riter de ArrayAdapter lt Planete gt pour ne pas tout reprogrammer amp public class PlaneteAdapter extends ArrayAdapter lt Planete gt public PlaneteAdapter Context context 52 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 List lt Planete gt planetes super context 0 planetes Source biblio http www bignerdranch com blog customizing android listview rows subclassing 4 4 2 Classe Adapter perso suite Sa principale m thode est getView qui cr e les vues pour le ListView Elle retourne une disposition p ex un RelativeLayout contenant des TextView et ImageView public View getView int position View recup ViewGroup parent e position est le num ro dans le List View de litem afficher e recup est une ancienne vue devenue invisible dans le ListView C est une technique pour diminuer les allocations m moire on r
73. e puis de le compresser en PNG amp public void save String filename ji Bitmap bitmap getDrawingCache try 4 File0utputStream out new FileOutputStream filename bitmap compress Bitmap CompressFormat PNG 90 out out close catch Exception e J 8 1 17 Coordonn es dans un canvas Un dernier mot sur les canvas Il y a tout un m canisme permettant de modifier les coordonn es dans un canvas e d placer l origine avec translate dx dy toutes les coordonn es fournies ult rieurement seront additionn es dx dy e multiplier les coordonn es par sx sy avec scale sx sy e pivoter les coordonn es autour de px py d un angle a avec rotate a px py En fait il y a un m canisme de transformations matricielles 2D appliqu es aux coordonn es ainsi qu une pile permettant de sauver la transformation actuelle ou la restituer 115 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 e save enregistre la matrice actuelle e restore restitue la matrice avec celle qui avait t sauv e 8 2 Interactions avec l utilisateur 8 2 1 couteurs pour les touchers de l cran Il existe beaucoup d couteurs pour les actions de l utilisateur sur une zone de dessin Parmi elles on doit conna tre onTouchEvent Son param tre indique la nature de l action toucher mouvement ainsi que les coordonn es 4 verride public boolean onTouchEvent MotionEve
74. e EE YRS IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 aL Wate ees ok eee A eh Eee EER AA 66 30 Diferentes apparent s ci io risas resi RS RE HARE EEE RES 68 ao Cycle de Wie dun TAE ne eee wee e A 6 RE HH 69 or Uno deus kagments AMOS osos eS eR ES Se wR As 71 ee Preltrences de l application 2 244 444 4624 26444 68 eS ESR Eat RE EME 75 39 Logode DOLES se eoet hoea ye piei pOr A IE AA e TOEO k 78 40 Application bloqu e em a a x ae ne era L ete RES ru 95 41 M thodes d un AsyncTask 4 4 4 4 Bede na pu cup de ers amp 96 EE II 103 43 Marqueur personnalis 106 44 Application de dessin vias 4 D ER OR AREER SRE S EURE 110 as Deorade Horizontal se LL UN Less he E La Nr Se eS 113 AG Dmage SE cara A AAA EN SAR AA HER OE A 114 ay Dessin LA ML sac RARA 114 oF AMIA o o o A ei A BAe es 117 49 S lecteur de couleur s 4 secc esmo esd aee wenog We AA 117 50 S lecteur de couleur simples lt sa s eerde pieu ds di a A 118 OL S lecteur de fichief a sch haha uaaa ees A de pee da 120 122
75. e back dessus car elle disparait de la pile 35 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 2 4 Lancement avec attente de r sultat Le lancement d une activit avec attente de r sultat est plus complexe Il faut d finir un code d appel RequestCode fourni au lancement amp private static final int APPEL ACTIV2 1 Intent intent new Intent this Activ2 class startActivityForResult intent APPEL ACTIV2 Ce code identifie l activit lanc e afin de savoir plus tard que c est d elle qu on revient Par exemple on pourrait lancer au choix plusieurs activit s dition copie suppression d informations Il faut pouvoir les distinguer au retour Consulter cette page 3 2 5 Lancement avec attente suite Ensuite il faut d finir une m thode callback qui est appel e lorsqu on revient dans notre activit 4 Override protected void onActivityResult int requestCode int resultCode Intent data lf Ute fort back if resultCode Activity RESULT CANCELED return selon le code d appel switch requestCode case APPEL_ACTIV2 on revient de Activ2 i 1 3 2 6 M thode onActivityResult onActivityResult int requestCode int resultCode Intent data e requestCode est le code d appel de startActivityForResult e resultCode vaut soit RESULT_CANCELED soit RESULT_OK e data est fourni par l autre activit Ces deux derni res viennent d un appel s
76. e l application veut manipuler l une de ses vues elle doit faire utiliser R id symbole ex TextView tv TextView findViewById R id message remarquez la conversion de type avec la d finition suivante lt RelativeLayout gt lt TextView android id id message android text string bonjour gt lt RelativeLayout gt La notation id nom fait cr er ou utiliser R id nom 2 1 12 android id Qid nom ou id nom Il y a les deux notations id nom pour r f rencer un identifiant d fini ailleurs id nom pour cr er cet identifiant Exemple lt RelativeLayout xmlns android gt lt TextView android id id titre android text string titre gt 22 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt BUET ONCE android id 0 id btn android layout_below Cid titre android text 0string ok gt lt RelativeLayout gt 2 1 13 Images R drawable nom De la m me facon les images plac es dans res drawable sont r f rencables lt ImageView android src drawable velo android contentDescription string mon_velo gt La notation drawable nom r f rence l image res drawable nom 2 1 14 Tableau de cha nes R array nom Voici un extrait du fichier res strings arrays xml lt resources gt lt string array name planetes gt lt item gt Mercure lt item gt lt item gt Venus lt item gt lt item gt Terre lt item gt
77. ecting an item l updates Fragment B l starts Activity B Activity A contains Activity A contains Activity B contains Fragment A and Fragment B Fragment A Fragment B Figure 35 Diff rentes apparences Override public View onCreateView LayoutInflater inflater ViewGroup container Bundle savedInstanceState return inflater inflate R layout infos_fragment container false 5 3 4 Diff rents types de fragments Il existe diff rents types de fragments voici quelques uns e ListFragment pour afficher une liste d items comme le ferait une ListActivity e DialogFragment pour afficher un fragment dans une fen tre flottante au dessus d une activit e PreferenceFragment pour g rer les pr f rences En commun il faut surcharger la m thode onCreateView qui d finit leur contenu 5 3 5 Cycle de vie des fragments Les fragments ont un cycle de vie similaire celui des activit s avec quelques m thodes de plus correspondant leur int gration dans une activit Voir la figure 36 page 69 5 3 6 ListFragment Par exemple voici l attribution d un layout standard pour la liste y 68 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 onAttach onCreate onDestroy onCreateView onDestroyView onActivityCreated onStart Figure 36 Cycle de vie d un fragment OOverride public View onCreateView LayoutInflater inflater
78. ement le contour Paint Style FILL uniquement l int rieur Paint Style FILL AND STROKE contour et int rieur e setStrokeWidth float pixels d finit la largeur du contour 8 1 7 Motifs Il est possible de cr er une peinture bas e sur un motif On part d une image motif png dans le dossier res drawable qu on emploie comme ceci t Bitmap bmMotif BitmapFactory decodeResource context getResources R drawable motif BitmapShader shaderMotif new BitmapShader bmMotif Shader TileMode REPEAT Shader TileMode REPEAT mPaintMotif new Paint Paint ANTI ALIAS FLAG mPaintMotif setShader shaderMotif mPaintMotif setStyle Paint Style FILL_AND_STROKE Cette peinture fait appel un Shader C est une classe permettant d appliquer des effets progressifs tels qu un d grad ou un motif comme ici BitmapShader 8 1 8 Shaders Voici la r alisation d un d grad horizontal bas sur 3 couleurs amp final int couleurs new int Color reb0128 255 22 vert pomme Color reb 25b 128 032 orange Color reb 0 00 1255 bleu x final float positions new float 1 0 0 0 5t 1 01 E Shader shader new LinearGradient 0 0 100 O 112 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 couleurs positions Shader TileMode CLAMP mPaintDegrade new Paint Paint ANTI ALIAS FLAG mPaintDegrade setShader shader Figure 45 D grad horizontal
79. er this confirm setTitle Suppression confirm setIcon android R drawable ic_dialog alert confirm setMessage Vous confirmez la suppression Ensuite on rajoute les boutons et leurs couteurs 5 2 5 Boutons et affichage d un dialogue d alerte Le builder permet de rajouter toutes sortes de boutons oui non ok anmuler Cela se fait avec des fonctions comme celle ci On peut associer un couteur anonyme priv ou ou aucun amp rajouter un bouton oui qui supprime vraiment confirm setPositiveButton android R string yes new DialogInterface OnClickListener public void onClick DialogInterface dialog int idBtn SupprimerElement idElement DE rajouter un bouton non qui ne fait rien confirm setNegativeButton android R string no null affichage du dialogue confirm show 65 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5 2 6 Autres types de dialogues d alerte Dans un dialogue d alerte au lieu de boutons il est possible d afficher une liste de propositions pr d finies Pour cela e D finir une ressource de type tableau de cha nes res values arrays xml amp lt resources gt lt string array name notes gt lt item gt Nul lt item gt lt item gt a le fait lt item gt lt item gt Trop cool lt item gt lt string array gt lt resources gt e Appeler la m thode confirm setltems R array notes couteur L couteur est le
80. es classes et m thodes absentes des pr c dentes APIs e Target SDK l application sera test e et marchera correctement jusqu ce niveau d API IUT de Lannion Dept Informatique Programmation Android 2014 15 P Nerzic e Compile With c est le niveau maximal de fonctionnalit s qu on se limite employer Si on fait appel quelque chose de plus r cent que ce niveau le logiciel ne se compilera pas 1 3 4 Premier exemple Pour un premier essai il faut se limiter au programme le plus simple Blank Activity 1 3 5 New Android Application Create Activity Select whether to create an activity and if so what kind of activity E Create Activity Blank Activity with Fragment Empty Activity Fullscreen Activity Master Detail Flow Navigation Drawer Activity Tabbed Activity Blank Activity a Q lt Back Next gt Cancel Figure 4 Choix du type d activit Points configurer L assistant demande plusieurs informations e Cr ation d un ic ne d application Nom de l application ex HellouHorde Paquetage Java de l application ex fr iutlan info2 hellouhorde Nom de la classe principale MainActivity Nom du layout de la classe principale activity_main Tout peut tre renomm ult rieurement voir refactor rename 1 3 6 R sultat de l assistant L assistant a cr de nombreux l ments Src res les sources rang s p
81. es que le XML brut mais ne permettent pas de tout faire Dans certains cas il faut diter le source XML directement amp lt RelativeLayout xmlns android http schemas android com apk res android android layout_width match_parent android layout_height match_parent gt lt TextView android layout_width wrap_content IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 Java HelloWorld AndroidManif Fi Edit Refactor Navigate Search Project Run Window Help E EN CAT A AE A AER AA Quick Access B PNA Debug D MainActivityjava Gi main xml HelloWorld Manifest z E Android Manifest Ez Manifest General Attributes Defines general information about the AndroidManifest xml Package fr iutian helloworld Browse Version code 1 Version name 1 0 Browse Shared user id Browse Shared user label Browse Install location Manifest Extras V0O0PODODO Uses Sdk Exporting To export the application for distribution you have the following options Use the Export Wizard to export and sign an APK Export an unsigned APK and sign it manually Manifest A Application P Permissions 1 Instrumentation AndroidManifest xml Figure 6 diteur du manifeste es layout main xml Eclipse File Edit Refactor Navigate Search Project Run Window Help ras Aa t s 0 a vise er raro le A Quick Ac es NA Debug al D MainActivityjava
82. est une classe qui e acc de aux donn es l aide de m thodes telles que getItem int position getCount isEmpty quelque soit le type de stockage des l ments tableau BDD e cr e les vues d affichage des items getView l aide du layout des items Cela consiste instancier le layout on dit expanser le layout inflate en anglais 4 3 3 Adaptateurs pr d finis Android propose quelques classes d adaptateurs pr d finis dont e ArrayAdapter pour un tableau simple liste dynamique e SimpleCursorAdapter pour acc der une base de donn es qu on verra dans deux semaines 90 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Donn es Adaptateur Vue valeurs instanci s des items RR Figure 26 Adaptateur entre les donn es et la vue En g n ral dans une application innovante il faut d finir son propre adaptateur voir page 52 mais commencons par un ArrayAdapter standard 4 3 4 ArrayAdapter lt Type gt pour les listes Il permet d afficher les donn es d un ArrayList mais il est limit une seule cha ne par item par exemple le nom d une plan te fournie par sa m thode toString Son constructeur ArrayAdapter Context context int item_layout_id int textview_id List lt T gt donn es context c est l activit qui cr e cet adaptateur mettre this item layout_ id identifiant du layout des items p ex android R layout simple_list_
83. et cat gorie LAUNCHER dans AndroidManifest xml Ensuite d autres activit s peuvent tre d marr es Chacune se met devant les autres comme sur une pile Deux cas sont possibles e La pr c dente activit se termine on ne revient pas dedans Par exemple une activit o on tape son login et son mot de passe lance l activit principale et se termine 34 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 e La pr c dente activit attend la fin de la nouvelle car elle lui demande un r sultat en retour Exemple une activit de type liste d items lance une activit pour diter un item quand on clique longuement dessus mais attend la fin de l dition pour rafra chir la liste 3 2 2 Navigation entre activit s Voici un sch ma illustrant les possibilit s de navigation parmi plusieurs activit s Book 1 Title Dates cs Book 1 Title Book 2 Title Movie 1 Title AUTHOR 1 AUTHOR 2 GENRE Book 2 Title ana 2 Figure 21 Navigation parmi les activit s d une application 3 2 3 Lancement sans attente Rappel pour lancer Activ2 partir de Activi amp Intent intent new Intent this Activ2 class startActivity intent On peut demander la terminaison de this apr s lancement de Activ2 ainsi amp Intent intent new Intent this Activ2 class startActivity intent finish finish fait terminer l activit courante L utilisateur ne pourra pas fair
84. et osmbonuspack soient assortis car le second utilise le premier e SLF4J Chercher le dernier binary slfdj android XXX jar en bas de la page Cette ann e c est le 1 6 1 7 3 4 Installer une librarie Les fichiers jar binaires contiennent les classes compil es ainsi que les ressources d un projet C est une sorte d archive zip Installer un jar signifie 1 Recopier le fichier binaire jar dans le dossier 1ibs de votre projet On ne doit pas d compresser le fichier 2 Ouvrir les propri t s du projet aller sur le panneau de gauche Java Build Path a onglet Librairies ajouter le fichier jar du dossier libs b onglet Order and Export cochez le fichier jar sinon il ne sera pas inclus dans le paquet de votre application et donc il manquera l ex cution C est faire sur les trois libraries indiqu es 7 3 5 Layout pour une carte OSM Tr s simple ce n est pas un fragment mais une vue personnalis e t lt xml version 1 0 encoding utf 8 gt lt LinearLayout xmlns android android layout_width match_parent android layout_height match_parent android orientation vertical gt lt org osmdroid views MapView android id 0 id map android layout_width match_parent android layout_height match_parent tilesource Mapnik gt lt LinearLayout gt 4V rifier avec les premi res lignes de cette page exemple OSMBonusPack jars from v5 1 are based on osmdroid v4 3 104 IUT
85. etResult resultCode data Par exemple l autre activit se termine ainsi amp setResult RESULT _ OK getIntent finish ou par amp setResult RESULT_CANCELED Finish 36 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 2 7 Transport d informations dans un Intent Les Intent servent aussi transporter des informations d une activit l autre les extras Voici comment placer des donn es dans un Intent 4 Intent intent new Intent this DeletelnfoActivity class intent putExtra idInfo idInfo intent putExtra hiddencopy hiddencopy startActivity intent putExtra nom valeur rajoute un couple nom valeur dans l intent La valeur doit tre s rialis able nombres cha nes et structures simples 3 2 8 Extraction d informations d un Intent Ces instructions r cup rent les donn es d un Intent t Intent intent getIntent Integer idInfo intent getIntExtra idInfo 1 bool hiddencopy intent getBooleanExtra hiddencopy false e getIntent retourne Intent qui a d marr cette activit e get TypeExtra nom valeur par d faut retourne la valeur de ce nom si elle en fait partie la valeur par d faut sinon 3 2 9 Contexte d application Pour finir sur les applications il faut savoir qu il y a un objet global vivant pendant tout le fonctionnement d une application le contexte d application Voici comment le r cup re
86. ew MySQLiteHelper this SQLiteDatabase bdd helper getReadableDatabase ou bien SQLiteDatabase bdd helper getWritableDatabase requ tes SQL sur l objet bdd A la terminaison de l application c est le helper qu il faut fermer et c est lui qui ferme la base helper close 6 3 CursorAdapter et Loaders 6 3 1 Lien entre une BDD et un ListView On revient vers l application qui affiche une liste Cette fois la liste doit tre le r sultat d une requ te SELECT Comment faire Les choses sont devenues relativement complexes depuis Android 3 Afin d viter que l application se bloque lors du calcul de la requ te et voir le message l application ne r pond pas Android emploie un m canisme appel chargeur loader en anglais 87 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Le principe est de rendre le calcul de la requ te SQL asynchrone d synchronis de l interface On lance la requ te SELECT et en m me temps on affiche une liste vide Lorsque la requ te sera finie la liste sera mise jour mais en attendant l interface ne reste pas bloqu e 6 3 2 tapes suivre e M thode onCreate de l activit qui affiche la liste 1 D finir un adaptateur de curseur pour la liste 2 Ouvrir la base de donn es 3 Cr er un chargeur de curseur et l associer this 4 D marrer le chargeur e D finir la classe MonCursorLoader sous classe
87. gt ten 2n lt item 2 2 sa lt TableRow gt lt TableLayout gt NB les lt TableRow gt n ont aucun attribut 2 2 12 Largeur des colonnes d un TableLayout Ne pas sp cifier android layout_width dans les vues d un TableLayout car c est obligatoirement toute la largeur du tableau Seul la balise lt TableLayout gt exige cet attribut Deux propri t s int ressantes permettent de rendre certaines colonnes tirables Fournir les num ros premi re 0 e android stretchColumns num ros des colonnes tirables e android shrinkColumns num ros des colonnes reductibles lt TableLayout android stretchColumns 1 2 android shrinkColumns 0 3 android layout_width match_parent android layout_height wrap_content gt 2 2 13 Groupe de vues RelativeLayout C est le plus complexe utiliser mais il donne de bons r sultats Il permet de sp cifier la position relative de chaque vue l aide de param tres complexes LayoutParams 27 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 e Tel bord align sur le bord du parent ou centr dans son parent android layout alignParentTop android layout_centerVertical e Tel bord align sur le bord oppos d une autre vue android layout toRightOf android layout above android layout below e Tel bord align sur le m me bord d une autre vue android layout alignLeft android layout_alignTop 2 2 14 Utilisation
88. ifeste au m me niveau que l application amp lt uses permission android name android permission INTERNET gt Sans cela les connexions r seau seront syst matiquement refus es 7 3 OpenStreetMap 7 3 1 Pr sentation Au contraire de Google Maps OSM est vraiment libre et OpenSource et il se programme extr mement facilement Voir la figure 42 page 103 7 3 2 Documentation Nous allons utiliser deux librairies e OSMdroid c est la librarie de base super mal document e Attention ne pas confondre avec un site de piraterie 102 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Figure 42 Google Maps 103 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 e OSMbonusPack un ajout remarquable cette base Son auteur s appelle Mathieu Kergall Il a ajout de tr s nombreuses fonctionalit s permettant entre autres d utiliser OpenStreetMap pour g rer des itin raires comme les GPS de voiture et aussi afficher des fichiers KML venant de Google Earth Lire cette suite de tutoriels pour d couvrir les possibilit s de osmbonuspack 7 3 3 Pour commencer Il faut d abord installer trois archives jar e OSMbonusPack T l chargez la derni re version de osmbonuspack_vXXX jar la 5 1 cette ann e e OSMdroid Choisir le dernier snapshot Cette ann e c est le 4 3 et t l chargez osmdroid android 4 3 XXX jar En fait il faut que osmdroid
89. il suffit de d finir deux layouts d finition statique e res layout port main_activity xml en mode portrait t lt LinearLayout xmlns android android orientation horizontal gt lt fragment android id tid frag liste gt lt LinearLayout gt e res layout land main_activity xml en mode paysage 4 lt LinearLayout xmlns android android orientation horizontal gt lt fragment android id id frag liste gt lt fragment android id 0 id frag infos gt lt LinearLayout gt 5 3 15 Deux dispositions possibles Lorsque la tablette est verticale le layout de layout port est affich et lorsqu elle est horizontale c est celui de layout land L activit peut alors faire un test pour savoir si le fragment frag_infos est affich amp OOverride protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState setContentView R layout main activity FragmentManager manager getFragmentManager InfosFragment frag_infos InfosFragment manager findFragmentById R id frag_infos if frag_infos null le fragment des informations est pr sent 5 3 16 Communication entre Activit et Fragments Lorsque l utilisateur clique sur un l ment de la liste du fragment frag_liste cela doit afficher ses informations e dans le fragment frag_infos s il est pr sent e ou lancer une activit d affichage s par e si le fragment n est pas
90. ion m j Android propose la classe suppl mentaire SQLiteOpenHelper qui facilite la gestion des bases de donn es Cette classe est une sorte d couteur avec deux m thodes surcharger e onCreate bdd cette m thode est appel e quand la base de donn es n existe pas encore Son r le est de cr er les tables C est l que vous mettez les CREATE TABLE e onUpgrade bdd int oldV int newV cette m thode est appel e quand la version de l application est sup rieure celle de la base Son r le peut tre de faire des ALTER TABLE UPDATE ou carr ment DROP TABLE suivis de onCreate Les m thodes getReadableDatabase et getWritableDatabase de SQLiteOpenHelper ouvrent la base et appellent automatiquement onCreate et onUpgrade si n cessaire 6 2 20 Exemple de helper 4 85 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 public class MySQLiteHelper extends SQLiteOpenHelper nom du fichier contenant la base de donn es private static final String DB_NAME test db version du sch ma de la base de donn es private static final int DB_VERSION 1 constructeur du helper ouvre et cr e m j la base public MySQLiteHelper Context context super context DB_NAME null DB VERSION 6 2 21 Exemple de helper suite y COverride public void onCreate SQLiteDatabase bdd cr ation avec la m thode de la classe TableTypes TableTypes create bdd Override
91. ir sa doc e etc Heureusement dans le cas de formulaires les actions sont majoritairement bas es sur des boutons 3 4 10 C est fini pour aujourd hui C est assez pour cette semaine rendez vous la semaine prochaine pour un cours sur les applications de gestion de donn es listes d items us tar nous verrons commen n roi Taine la no ion ac ivi en la s arant en Jragments Plus tard t Android raffine la notion d activit en 1 t t 44 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 Application liste Durant les prochaines semaines nous allons nous int resser aux applications de gestion d une liste d items e Stockage d une liste e Affichage d une liste adaptateurs e Consultation et dition d un item Figure 23 Liste d items 4 1 Pr sentation 4 1 1 Principe g n ral On veut programmer une application pour afficher et diter une liste d items e Cette semaine la liste est stock e dans un tableau dynamique appel ArrayList en semaine 6 a sera dans une base de donn es SQL locale ou sur un serveur distant e L cran est occup par un ListView C est une vue sp cialis e dans l affichage de listes quelconques Consulter cette documentation sur les ListView 4 1 2 Sch ma global L interm diaire entre la liste et la vue est g r par un adaptateur objet qui sait comment afficher un item dans le ListView Voir la figure 24 page 46 4 1 3 Une clas
92. it principale amp Override public void onltemSelected Item item as FragmentManager manager getFragmentManager InfosFragment frag_ infos InfosFragment manager findFragmentById R id frag_ infos if frgInfos null amp amp frgInfos isVisible le fragment est pr sent alors lui fournir l item frglnfos setItem item else 73 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lancer InfosActivity pour afficher l item Intent intent new Intent this InfosActivity class intent putExtra item item startActivity intent 5 3 20 Relation entre deux classes m diter partie 1 Une classe active capable d avertir un couteur d un v nement Elle d clare une interface que doit impl menter l couteur public class Classel public interface OnEvenementListener public void onEvenement int param private OnEvenementListener ecouteur null public void setOnEvenementListener OnEvenementListener objet ecouteur objet private void traitementInterne if ecouteur null ecouteur onEvenement argument 5 3 21 m diter partie 2 Une 2 classe en tant qu couteur des v nements d un objet de Classe1 elle impl mente l interface et se d clare aupr s de l objet public class Classe2 implements Classe1 0nEvenementListener a private Classel objeti public Classe2 objet1 setOnEvenementListener this
93. item_1 ou R layout item_planete textview__id identifiant du TextView dans ce layout p ex android R id text1 ou R id item_planete_nom donn es c est la liste contenant les donn es List est une surclasse de ArrayList 4 3 5 Exemple d emploi Suite de la m thode onCreate de l activit on fournit la ArrayList lt Planete gt mListe au construc teur d adaptateur amp cr er un adaptateur standard pour mListe ArrayAdapter lt Planete gt adapter new ArrayAdapter lt Planete gt this R layout item planete R id item planete nom mListe associer la liste affich e et l adaptateur ListView lv ListView findViewById android R id list lv setAdapter adapter 51 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 La classe Planete doit avoir une m thode toString cf page 45 Cet adaptateur n affiche que le nom de la plan te rien d autre 4 3 6 Affichage avec une ListActivity Si votre activit est une ListActivity la fin est peu plus simple amp verride protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState mListe new ArrayList lt Planete gt ArrayAdapter lt Planete gt adapter new ArrayAdapter association liste adaptateur setListAdapter adapter 4 3 7 Exemple avec les layouts standards Avec les layouts d items standards Android cela donne amp cr er un adaptateur standard pour mList
94. ition x d placer le marqueur de l utilisateur mrkUti setPosition new GeoPoint position redessiner la carte mMap invalidate J 7 3 17 Positions simul es Pour tester une application bas e sur le GPS sans se d placer physiquement il y a moyen d envoyer de fausses positions avec Eclipse Il faut afficher la fen tre Emulator Control En bas de celle ci il y a un panneau pour d finir la position de l AVD soit fixe soit l aide d un fichier GPX provenant d un r cepteur GPS de randonn e par exemple NB il y a un bug de connexion avec la tablette et il faut parfois fermer puis r ouvrir cette fen tre 7 3 18 Clics sur la carte C est le seul point un peu complexe Il faut sous classer la classe Overlay afin de r cup rer les touchers de l cran On doit seulement intercepter les clics longs pour ne pas g ner les mouvements sur la carte Voici le d but amp public class LongPressMap verlay extends Overlay constructeur public LongPressMapOverlay Context context 108 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 super context Override protected void draw Canvas c MapView m boolean shadow Pour installer ce m canisme il faut rajouter ceci dans onCreate mMap getOverlays add new LongPressMapOverlay this 7 3 19 Traitement des clics Le c ur de la classe traite les clics longs en convertissant les coordonn es d
95. iv2 class startActivity intent L instruction startActivity d marre Activ2 Celle ci se met devant Activi qui se met alors en sommeil Ce bout de code est employ par exemple lorsqu un bouton un menu etc est cliqu Seule contrainte que ces deux activit s soient d clar es dans AndroidManifest xml 3 1 8 Lancement d une application Android Il n est pas possible de montrer toutes les possibilit s mais par exemple voici comment ouvrir le navigateur sur un URL sp cifique amp String url http perso univ rennes1 fr pierre nerzic Android intent new Intent Intent ACTION_VIEW Uri parse url startActivity intent L action VIEW avec un URI g n ralisation d un URL est interpr t e par Android cela fait ouvrir automatiquement le navigateur 3 1 9 Lancement d une activit d une autre application Soit une seconde application dans le package fr iutlan appli2 Une activit peut la lancer ainsi 4 intent new Intent Intent ACTION_ MAIN intent addCategory Intent CATEGORY_LAUNCHER intent setClassName Limit Tan appt fr iutlan appli2 MainActivity intent setFlags Intent FLAG_ACTIVITY_NEW_TASK startActivity intent Cela consiste cr er un Intent d action MAIN et de cat gorie LAUNCHER pour la classe MainActivity de l autre application 3 2 Applications 3 2 1 Fonctionnement d une application Au d but le syst me Android lance l activit qui est marqu e action MAIN
96. l application d marre allouer les ressources Il faut comprendre que les utilisateurs peuvent changer d application tout moment La votre doit tre capable de r sister a 3 3 8 Enregistrement de valeurs d une ex cution l autre Il est possible de sauver des informations d un lancement l autre de l application certains cas comme la rotation de l cran ou une interruption par une autre activit dans un Bundle C est un container de donn es quelconques sous forme de couples nom valeur 4 static final String ETAT SCORE ScoreJoueur nom private int mScoreJoueur 0 valeur verride public void onSavelnstanceState Bundle etat 40 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 enregistrer l tat courant etat putInt ETAT SCORE mScoreJoueur super onSavelnstanceState etat 3 3 9 Restaurer l tat au lancement La m thode onRestorelnstanceState re oit un param tre de type Bundle comme la m thode onCreate mais dans cette derni re il peut tre null Il contient l tat pr c demment sauv amp verride protected void onRestorelnstanceState Bundle etat super onRestorelnstanceState etat restaurer l tat pr c dent mScoreJoueur etat getInt ETAT SCORE Ces deux m thodes sont appel es automatiquement sorte d couteurs sauf si l utilisateur tue l application Cela permet de reprendre l activit l o
97. l attribut android text lt TextView android id 0 id tvtitre android text string titre 5 ff On peut le changer dynamiquement amp TextView tvTitre TextView findViewById R id tvtitre tvTitre setText blablabla 2 3 3 Button L une des vues les plus utiles est le Button Ci lt Button android id id btn ok android text 0string ok D2 e En g n ral on d finit un identifiant pour chaque vue active ici android id id btn_ok e Son titre est dans l attribut android text e Voir la semaine prochaine pour son activit r action un clic 2 3 4 Bascules 4 Inscrire newsletter Les CheckBox sont des cases cocher lt CheckBox android id id cbx abonnement nl android text string abonnement newsletter s I gt online Les ToggleButton sont une variante On peut d finir le texte actif et le texte inactif avec android textOn et android textOff 2 3 5 EditText Un EditText permet de saisir un texte 97is univ rennes1 f lt EditText android id id email address android inputType textEmailAddress he 29 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 L attribut android inputType sp cifie le type de texte adresse t l phone etc Ca d finit le clavier qui est propos pour la saisie Lire la r f rence Android pour conna tre toutes les possibilit s 2 3 6 Autres vues On reviendra sur toutes ces vues les
98. l inclure dans un layout amp 110 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt xml version 1 0 encoding utf 8 gt lt LinearLayout xmlns android android layout_width match_parent android layout_height match_parent android orientation vertical gt lt fr iutlan dessin DessinView android id id dessin android layout_width match_parent android layout_height match_parent gt lt LinearLayout gt Il faut mettre le package et le nom de la classe en tant que balise XML Ne pas oublier les attributs de taille 8 1 3 M thode onDraw La m thode onDraw Canvas canvas doit effectuer tous les trac s Cette m thode doit tre rapide Egalement elle ne doit faire aucun new Il faut donc cr er tous les objets n cessaires auparavant par exemple dans le constructeur de la vue Son param tre canvas repr sente la zone de dessin Attention ce n est pas un bitmap Un canvas ne poss de pas de pixels c est le bitmap associ la vue qui les poss de Voici comment on associe un canvas un bitmap amp Bitmap bm Bitmap createBitmap 100 100 Bitmap Config ARGB_8888 Canvas canvas new Canvas bm C est d j fait pour le canvas fourni la m thode onDraw On obtient le bitmap de la vue avec getDrawingCache 8 1 4 M thodes de la classe Canvas La classe Canvas poss de de nombreuses m thodes de dessin e drawColor int color efface le c
99. lets amp public static void insertType SQLiteDatabase bdd Type type bdd execSQL INSERT INTO NomTable VALUES null new Object type getNom J public static void deleteType SQLiteDatabase bdd long id bdd execSQL DELETE FROM NomTable WHERE Id new Object id On va aussi rajouter des m thodes de consultation des donn es Voyons d abord la m thode execSQL 6 2 7 M thodes SQLiteDatabase execSQL Cette m thode ex cute une requ te SQL qui ne retourne pas d informations CREATE INSERT e void execSQL String sql on doit juste fournir la requ te sous forme d une cha ne C est une requ te constante Ne pas mettre de la fin Par exemple amp 81 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 bdd execSQL DROP TABLE Types e execSQL String sql Object bindArgs c est pour le m me type de requ te mais contenant des param tres marqu s par des et affect s aux objets fournis en param tre amp bdd execSQL DELETE FROM Types WHERE _id BETWEEN AND new Object 3 8 6 2 8 M thodes sp cialis es Android propose des m thodes sp cifiques pour ins rer modifier supprimer des n uplets e int insert String table null ContentValues valeurs e int update String table ContentValues valeurs String whereClause String whereArgs e int delete String table String whereClause String whereArgs
100. lets du curseur l aide d une boucle for 3 Fermeture du curseur indispensable pr voir les exceptions voir plus loin cursor close 3 Fermeture de la base indispensable pr voir les exceptions bdd close 6 2 4 Recommandations Il est pr f rable de d finir une classe associ e chaque table et m me chaque jointure a permet de faire voluer le logiciel assez facilement Cette classe regroupe toutes les requ tes SQL la concernant cr ation suppression mise jour parcours insertions sous forme de m thodes de classe La base de donn es est pass e en premier param tre de toutes les m thodes Pour commencer il est utile de d finir des symboles pour le nom de la table et ses colonnes amp 80 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 public class TableTypes public static final String NomTable Types public static final String Id gt public static final String Libelle Mibelle 6 2 5 Classe pour une table Suite de la classe TableTypes 4 public static void create SQLiteDatabase bdd as bdd execSQL CREATE TABLE NomTable Id INTEGER PRIMARY KEY AUTOINCREMENT Libelle TEXT NOT NULL ds public static void drop SQLiteDatabase bdd i bdd execSQL DROP TABLE IF EXISTS NomTable J Gare la syntaxe a doit cr er du SQL correct 6 2 6 Exemples de m thodes Voici des m thodes pour cr er ou supprimer des n up
101. mmation Android 2014 15 Figure 16 Cr ation d un trousseau de cl s Figure 17 Cr ation d une cl 18 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 2 Cr ation d interfaces utilisateur Le cours de cette semaine explique la cr ation d interfaces utilisateur e Relations entre un source Java et des ressources e Layouts et vues e Styles On ne s int resse qu a la mise en page L activit des interfaces sera tudi e la semaine prochaine NB les textes fuchsia sont des liens cliquables 2 1 Interface et ressources 2 1 1 Activit s L interface utilisateur d une application Android est compos e d crans Un cran correspond une activit ex e afficher une liste d items e diter un item l aide d un formulaire Les dialogues et les pop up ne sont pas des activit s ils se superposent temporairement l cran d une activit Android permet de naviguer d une activit l autre e une action de l utilisateur bouton menu ou l application fait aller sur l cran suivant e le bouton back ram ne sur l cran pr c dent 2 1 2 Cr ation d un cran Chaque cran est g r par une instance d une sous classe perso de Activity Sa m thode onCreate d finit entre autres ce qui doit tre affich sur l cran public class MainActivity extends Activity verride protected void onCreate Bundle savedInstanceState super onCrea
102. ndroid orientation horizontal ou vertical Lire la doc Android 2 2 9 Pond ration des tailles Une facon int ressante de sp cifier les tailles des vues dans un LinearLayout consiste leur affecter un poids avec l attribut android layout_weight e Un layout_weight gal 0 rend la vue la plus petite possible e Un layout_weight non nul donne une taille correspondant au rapport entre ce poids et la somme des poids des autres vues Pour cela il faut aussi fixer la taille de ces vues ex android layout_width soit wrap_content soit Odp Si la taille vaut wrap_content alors le poids agit seulement sur l espace suppl mentaire allou aux vues Mettre Odp pour que a agisse sur la taille enti re 2 2 10 Exemple de poids diff rents Voici 4 LinearLayout horizontaux de 3 boutons ayant des poids gaux leurs titres En 3 ligne les boutons ont une largeur de Odp Voir la figure 20 page 27 2 2 11 Groupe de vues TableLayout C est une variante du LinearLayout les vues sont rang es en lignes de colonnes bien tabul es Il faut construire une structure XML comme celle ci Voir sa doc Android 26 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 5554 Android412 LayoutWeights Figure 20 Influence des poids sur la largeur lt TableLayout gt lt TableRow gt lt item 1 1 gt lt item 12 7e lt TableRow gt lt TableRow
103. ndroid layout_height wrap_content gt Et cette classe PlaneteView h rite de RelativeLayout amp package fr iutlan planetes public class PlaneteView extends RelativeLayout 4 4 6 Classe personnalis e dans les ressources Android permet d utiliser les classes de notre application l int rieur d un layout Il suffit de les pr fixer par le package amp lt xml version 1 0 encoding utf 8 gt lt LinearLayout xmlns android android layout_width match_parent android layout_height wrap_content gt lt fr iutlan customviews MaVuePerso android layout_width match_parent android layout_height wrap_content gt lt LinearLayout gt La classe MaVuePerso doit h riter de View et impl menter certaines m thodes 4 4 7 Classe PlaneteView pour afficher les items Cette classe a pour but de g rer les vues dans lesquelles il y a les informations des plan tes nom distance image On la met a la place du RelativeLayout dans res layout item_planete xml lt xml version 1 0 encoding utf 8 gt lt fr iutlan planetes PlaneteView gt lt ImageView android id id item_planete_image gt lt TextView android id id item_planete_nom gt lt TextView android id id item_planete_distance gt lt fr iutlan planetes PlaneteView gt Les propri t s de placement restent les m mes 54 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 4 8
104. nements par un seul processus l ger un thread appel Main thread Ce thread ne doit jamais travailler plus de quelques fractions de secondes sinon l interface para t bloqu e et Android peut m me d cider que l application est morte App Not Responding orld isn t responding Figure 40 Application bloqu e 7 1 2 T ches asynchrones Pourtant dans certains cas une callback peut durer longtemps e gros calcul e requ te SQL un peu complexe e requ te r seau La solution passe par une s paration des threads par exemple l aide d une t che asynchrone AsyncTask C est un autre thread ind pendant de l interface utilisateur comme un job Unix Lancer un AsyncTask ressemble a faire commande amp en shell L interface utilisateur peut tre mise jour de temps en temps par la AsyncTask et galement la fin 7 1 3 Principe d utilisation d une AsyncTask Ce qui est mauvais 1 Android appelle la callback de l activit 2 La callback met 20 secondes faire son travail mais 3 Au bout de 5 secondes Android propose de tuer l application Ce qui est correct 1 Android appelle la callback de l activit 2 La callback cr e une AsyncTask puis sort imm diatement 3 Le thread de l AsyncTask travaille pendant 20 secondes 95 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 Pendant ce temps l interface est vide mais reste r active 5 L AsyncT
105. nnaire de paquets Android Assistant de cr ation de projet Choix du type d activit 2 62 2444 660 heu deu Ee ja l ments d un projet Android diteur du manifeste diteur graphiq ue lt lt lt binge has eh as vue etes Cr ation dum AVDO 4 po da press da A Barre d outils pour lancer une application Lancer en tant qu application Android MESES TA sc aa RARA de Liste des AVD et tablettes connect es Arbre des fichiers d une tablette COMA sos e ee eie gA crko a aok ed Rein he AS ERAS LOU e ok ca e bee bee a o e Cr ation d un trousseau de cl s Leen Une Cle 4 sco da Les sa aa Re ae La wes Arbre de NET oo US Na Ni s Ehana OR Cons Bords et Marges 2 2 5 mat dos ar SR RSS BREESE ES r a Influence des poids sur la largeur Navigation parmi les activit s d une application US AS LL ANT LS este a dans CCR de x de Liste GS errada Vue adaptateur et donn es 4 64404 e ee ho ed ERG a LEONE complex cias Ha sue AAA LR este Adaptateur entre les donn es et la vue RP AR A ce es ni dada l ments cochables a MAO es ee Lie AR haben ia uen LENS CONS Li a ae OR EHR CR ERE ESE ES REA MenuContexbu l 4 44 48 64 44 eee ke ee R
106. nt android layout_height wrap_content gt lt TextView android id Candroid id text1 android textStyle bold android layout_width match_parent 49 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 android layout_height wrap_content gt lt LinearLayout gt 4 2 6 Autre layouts Il est possible de cr er des dispositions plus complexes pour les items mais alors il faudra programmer un adaptateur sp cifique Figure 25 Layout complexe amp xml Voir les adaptateurs personnalis s page 52 4 2 7 Layouts pr d finis Android d finit des layouts pour des l ments de listes simples e android R layout simple list item_1 C est un layout qui affiche un seul TextView Son identifiant est android R id texti e android R layout simple list _ item _2 C est un layout qui affiche deux TextView un titre en grand et un sous titre Ses identifiants sont android R id text1 et android R id text2 Il suffit de les fournir l adaptateur Il n y a pas besoin de cr er des fichiers XML ni pour l cran ni pour les items 4 3 Adaptateurs 4 3 1 Relations entre la vue et les donn es Un ListView affiche les items l aide d un adaptateur adapter 4 3 2 R le d un adaptateur L adaptateur r pond la question que pose le ListView que dois je afficher tel endroit dans la liste Il va chercher les donn es et instancie le layout d item avec les valeurs C
107. nt event float x event getX float y event getY switch event getAction case MotionEvent ACTION MOVE break return true 8 2 2 Mod le de gestion des actions Souvent il faut distinguer le premier toucher ex cr ation d une figure des mouvements suivants ex taille de la figure amp switch event getAction case MotionEvent ACTION DOWN figure Figure creer typefigure color figure setReference x y figures add figure break case MotionEvent ACTION MOVE if figures size lt 1 return true figure figures getLast figure setCoin x y break i invalidate 8 2 3 Automate pour g rer les actions L algo pr c dent peut se repr senter l aide d un automate de Mealy deux tats repos et en cours d dition d une figure Les changements d tats sont d clench s par les actions utilisateur et effectuent un traitement Voir la figure 48 page 117 116 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 INIT ACTION DOWN ajouter une nouvelle figure ACTION MOVE modifier la derni re figure ajout e Figure 48 Automate 8 3 Bo tes de dialogue sp cifiques 8 3 1 S lecteur de couleur Android ne propose pas de s lecteur de couleur alors il faut le construire soi m me Choisissez une couleur Figure 49 S lecteur de couleur 8 3 2 Version simple En TP on va construire une version simplifi e
108. ntaire gt lt element attributi valeuri attribut2 valeur2 gt lt feuillei attribut3 valeur3 gt lt feuille2 gt texte lt feuille2 gt lt element gt texte en vrac lt racine gt 2 1 6 Espaces de nommage dans un fichier XML Dans le cas d Android il y a un grand nombre d l ments et d attributs normalis s Les attributs ont t regroup s dans un namespace xmlns Leur nom est android nomattribut Vous pouvez lire cette page sur les namespaces lt menu xmlns android http schemas android com apk res android gt lt item 20 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 android id id action settings android orderInCategory 100 android showAsAction never android title Configuration gt lt menu gt 2 1 7 Cr ation d une interface par programme Il est possible de cr er une interface par programme mais c est assez compliqu protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState Context ctx getApplicationContext TextView tv new TextView ctx tvesetlext Demat N e RelativeLayout rl new RelativeLayout ctx LayoutParams lp new LayoutParams lp width LayoutParams MATCH_PARENT lp height LayoutParams MATCH_PARENT rl addView tv lp setContentView rl 2 1 8 Programme et ressources Il est donc pr f rable de stocker l interface dans un fichier res layout main xml lt RelativeLayo
109. ost ou retard postDelayed de la t che Elle peut elle m me se relancer 7 2 Requ tes HTTP 7 2 1 Pr sentation Voici quelques explications sur la mani re de faire une requ te HTTP d une tablette vers un serveur Android propose plusieurs m canismes e un client HTTP Apache DefaultHttpClient bien pratique mais il est obsol te depuis l API 22 e une classe appel e HttpURLConnection maintenant recommand e e une API appel e Volley un peu trop complexe pour ce cours Vous savez que le protocole HTTP a plusieurs m thodes dont GET POST PUT et DELETE qui sont employ es pour g rer un WebService On va voir les deux premi res 7 2 2 Principe de programmation pour un GET Voici les tapes 1 Cr er une instance de URL qui indique l url de la page voulue avec ses param tres 2 Cr er une instance de HttpURLConnection en appelant openConnection sur URL 3 optionnel Configurer la requ te agent authentification type mime session cookies 4 Lire la r ponse avec getInputStream intercepter les exceptions IOException s il y a un probleme 5 D connecter afin de lib rer la connexion Noter que le serveur peut mettre du temps a r pondre il faut donc placer cela dans une AsyncTask 7 2 3 Exemple de requ te GET 4 100 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 URL url new URL http pnerzic iut lannion fr get avis php _id 2
110. prochaines semaines pour pr ciser les attributs utiles pour une application D autres vues pourront aussi tre employ es l occasion 2 4 Styles 2 4 1 Styles et th mes Un style permet de modifier l apparence d une vue e Police de caract res et tailles pour les textes e Couleurs images e G om trie par d faut des vues taille espacement remplissage Un th me est un style appliqu toute une activit ou application Consulter la documentation Android 2 4 2 D finir un style Il faut cr er un fichier XML dans res value amp lt xml version 1 0 encoding utf 8 gt lt resources gt lt style name Elegant parent Candroid style TextAppearance Medium gt lt item name android textColor gt 010101 lt item gt lt item name android typeface gt serif lt item gt lt style gt lt resources gt L attribut name identifie le style et parent le rattache a un autre pour h ritage des propri t s non d finies ici Voir les styles et les themes pr d finis 2 4 3 Utiliser un style Il suffit de le pr ciser dans la d finition de la vue amp lt TextView style style Elegant android text string titre gt 30 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 2 4 4 Utiliser un th me Un th me est simplement un style appliqu partout dans l application Cela se sp cifie dans le fichier AndroidManifest xml 44 lt application and
111. r amp Application context this getApplicationContext Par d faut c est un objet neutre ne contenant que des informations Android Il est possible de le sous classer afin de stocker des variables globales de l application 3 2 10 D finition d un contexte d application Pour commencer d river une sous classe de Application amp public class MonApplication extends Application variable globale de l application public int varglob initialisation du contexte verride public void onCreate 37 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 super onCreate varglob 3 3 2 11 D finition d un contexte d application suite Ensuite la d clarer dans AndroidManifest xml dans l attribut android name de l l ment lt application gt lt manifest xmlns android gt lt application android name MonApplication android icon drawable icon android label string app_name gt 3 2 12 D finition d un contexte d application fin Enfin l utiliser dans n importe laquelle des activit s amp r cup rer le contexte d application MonApplication context MonApplication this getApplicationContext utiliser la variable globale context varglob Remarquez la conversion de type Il est recommand de d finir des setters et getters D autre part attention aux variables globales ne les utiliser qu a bon escien
112. ram tres _id et libelle Elle a une particularit cette m thode est asynchrone C est dire qu elle lance un change r seau en arri re plan et n attend pas qu il se termine C est obligatoire sinon Android affiche une erreur application ne r pond pas dialogue ANR Le principe pour cela est de cr er une AsyncTask Elle g re une action qui est ex cut e dans un autre thread que celui de l interface On verra cela la semaine prochaine Du coup il faut un couteur pr venir quand l action est termin e C est le premier param tre pass la m thode post Par exemple c est l activit d affichage de liste qui peut alors mettre jour la liste affich e 6 5 13 C est tout pour aujourd hui C est fini pour cette semaine rendez vous la semaine prochaine pour un cours sur les acc s r seau asynchrones ainsi que la cartographie OpenStreet View 94 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 7 Affichage de donn es g olocalis es Cette semaine est consacr e PAPI de cartographie OpenStreetMap mais auparavant quelques concepts importants conna tre les t ches asynchrones et les requ tes r seau 7 1 AsyncTasks 7 1 1 Pr sentation Une activit Android repose sur une classe ex MainActivity qui poss de diff rentes m thodes comme onCreate les couteurs des vues des menus et des chargeurs Ces fonctions sont ex cut es en fonction des v
113. reate Bundle met en place les vues de cette activit setContentView R layout edit activity Override signifie que cette m thode remplace celle h rit e de la superclasse I faut quand m me l appeler sur super en premier 3 3 5 Terminaison d une activit Voici la prise en compte de la terminaison d finitive d une activit avec la fermeture d une base de donn es amp 39 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 C verride public void onDestroy super onDestroy fermer la base db close En fait il se peut que cette m thode ne soit jamais appel e Voir onStop plut t 3 3 6 Pause d une activit Cela arrive quand une nouvelle activit passe devant exemple un appel t l phonique Il faut lib rer les ressources qui consomment de l nergie animations GPS amp Override public void onPause super onPause arr ter les animations sur l cran Override public void onResume super onResume d marrer les animations 3 3 7 Arr t d une activit Cela se produit quand l utilisateur change d application dans le s lecteur d applications ou qu il change d activit dans votre application Cette activit n est plus visible et doit enregistrer ses donn es Il y a deux m thodes concern es e protected void onStop l application est arr t e lib rer les ressources e protected void onStart
114. rent false itemView findViews return itemView J static signifie qu on appelle cette m thode sur la classe elle m me et non pas sur une instance C est une m thode de classe 99 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 4 4 11 M thode findViews Cette m thode a pour but de r cup rer les objets Java des TextView et ImageView de l item Elle les recherche avec leurs propri t s android id 4 private void findViews 1 tvNom TextView findViewById R id item planete nom tvDistance TextView findViewByld R id item planete distance ivImage ImageView findViewByld R id item planete image J Ces trois variables sont des membres d instance du PlaneteView 4 4 12 Pour finir la m thode PlaneteView display e Son r le est d afficher les informations d une plan te dans les Text View et ImageView de l item public void display final Planete planete i tvNom setText planete getNom tvDistance setText Integer toString planete getDistance millions de km ivImage setImageResource planete getIdImage Elle utilise les getters de la classe Planete getNom 4 4 13 R capitulatif Voici la s quence qui am ne l affichage d un item dans la liste 1 Le ListView appelle la m thode getView position de l adaptateur position est le n de l l ment concern 2 L adaptateur appelle ventuellement PlaneteView cre
115. roid theme style Elegant android icon drawable ic_ launcher android label string app_name 2 lt application gt Attention si votre style n est pas complet vous aurez une erreur 2 4 5 C est tout C est fini pour cette semaine rendez vous la semaine prochaine pour un cours sur les couteurs et les activit s 31 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 Vie d une application Le cours de cette semaine concerne la vie d une application e Applications et activit s manifeste bibliographie e Cycles de vie voir cette page e Vues v nements et couteurs voir ce lien et celui ci 3 1 Applications et activit s 3 1 1 Composition d une application Une application est compos e de plusieurs activit s Chacune g re un cran d interaction avec l utilisateur et est d finie par une classe Java Une application complexe peut aussi contenir e des services ce sont des processus qui tournent en arri re plan e des fournisseurs de contenu ils repr sentent une sorte de base de donn es voir la semaine 5 e des r cepteurs d annonces pour g rer des v nements globaux envoy s par le syst me toutes les applications 3 1 2 D claration d une application Le fichier AndroidManifest xml d clare les l ments d une application avec un devant le nom des activit s lt xml version 1 0 encoding utf 8 gt lt manifest gt l
116. rsque l utilisateur fait un clic long cela d clenche cette m thode amp ODverride public void onCreateContextMenu ContextMenu menu View v ContextMenuInfo menulnfo super onCreateContextMenu menu v menulnfo getMenulnflater inflate R menu main context menu Son r le est d expanser inflate le menu res menu main_ context 5 1 12 Callback des items du menu Pour finir si l utilisateur choisit un item du menu amp 63 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 public boolean onContextItemSelected Menultem item AdapterContextMenuInfo info item getMenuInfo switch item getItemId case R id editer onMenuEditer info id identifiant de l l ment return true case R id supprimer onMenuSupprimer info id return true Js return false L objet AdapterContextMenuInfo info permet d avoir l identifiant de ce qui est s lectionn qui a fait appara tre le menu contextuel 5 2 Annonces et dialogues 5 2 1 Annonces toasts Un toast est un message apparaissant en bas d cran pendant un instant par exemple pour confirmer la r alisation d une action Un toast n affiche aucun bouton et n est pas actif Figure 32 Toast Voici comment l afficher avec une ressource cha ne amp Toast makeText getApplicationContext R string item_supprime Toast LENGTH_SHORT show La dur e d affichage peut tre allong e avec LENGTH_LONG
117. s RechercheMeilleur extends AsyncTask lt String Void Long gt protected Long doInBackground String libelles long identifiant 1L 7 7 Long caleul return identifiant J protected void onPostExecute Long resultat utiliser resultat ex l afficher dans un TextView 7 1 15 Recommandations Il faut faire extr mement attention e ne pas bloquer le thread principal dans une callback plus de quelques fractions de secondes e ne pas manipuler une vue ailleurs que dans le thread principal Ce dernier point est tr s difficile respecter dans certains cas Si on cr e un thread il ne doit jamais acc der aux vues de l interface Il n a aucun moyen d interagir avec l utilisateur L exception qui se produit est Only the original thread that created a view hierarchy can touch its views Les solutions d passent largement le cadre de ce cours et passent par exemple par la m thode Activity runOnUiThread 99 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 7 1 16 Autres t ches asynchrones Il existe une autre mani re de lancer une t che asynchrone amp Handler handler new Handler final Runnable tache new Runnable Override public void run 4 faire quelque chose optionnel relancer cette t che dans 5 secondes handler postDelayed this 5000 i lancer la t che tout de suite handler post tache Le handler g re le lancement imm diat p
118. s de nombreuses applications ailleurs que dans Android p ex dans Firefox pour stocker les marque pages l historique de navigation etc SQLite3 est aussi une API pour diff rents langages de programmation C Python PHP Java On peut ex cuter des requ tes SQL en appelant des fonctions Android le propose aux programmeurs pour stocker des informations structur es plut t que bricoler avec des fichiers Il est assez facile utiliser une fois le cadre mis en place 6 1 5 Lancement de sqlite3 en shell sqlite3 est une commande qui ouvre un shell SQL pour saisir directement des requ tes sans connexion On peut fournir un param tre le nom d un fichier qui contient la base soit aucun et dans ce cas la base n est qu en m moire perdue quand on quitte bash sqlite3 test db sqlite gt Cette commande est dans le dossier du SDK sous dossier platform tools Linux et Windows Elle n est pas forc ment incluse dans le syst me Linux de la tablette 6 1 6 Commandes internes Le shell de SQLite3 poss de des commandes internes p ex help affiche la liste des commandes internes dump table affiche le contenu de la table ou de toute la base si la table est omise schema table affiche la structure de la table headers mettre on ou off pour crire les noms des colonnes en t te de tous les select exit sort du shell sqlite3 79 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 6 2 SQ
119. se pour repr senter les items Pour commencer une classe pour repr senter les items amp public class Planete public String mNom public int mDistance Planete String nom int distance 45 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 Donn es Vue Adaptateur ArrayList ListView Figure 24 Vue adaptateur et donn es mNom nom nom de la plan te mDistance distance distance au soleil en Gm public String toString return mNom y 4 1 4 Donn es initiales Deux solutions pour initialiser la liste avec des items pr d finis e Un tableau dans les ressources voir page 47 e Un tableau Java comme ceci amp final Planete initdata new Planete Mercure 58 new Planete V nus 108 new Planete Terre 150 de final signifie constant sa valeur ne changera plus 4 1 5 Copie dans un ArrayList L tape suivante consiste recopier les valeurs initiales dans un tableau dynamique de type ArrayList lt Planete gt 4 46 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 protected ArrayList lt Planete gt mliste void onCreate x cr ation du tableau dynamique mListe new ArrayList lt Planete gt boucle am lior e Java7 for Planete planete initdata mListe add planete I Je 4 1 6 Le container Java ArrayList lt type gt C est un type de donn es g n rique c est dire
120. stance en tant qu couteur 4 private class EcBtnValider implements OnClickListener public void onClick View btn faire quelque chose des public void onCreate Button btn Button findViewById R id btn_ valider btn setOnClickListener new EcBtnValider 3 4 7 L activit elle m me en tant qu couteur Il suffit de mentionner this comme couteur et d indiquer qu elle impl mente l interface OnClickListener amp public class EditActivity extends Activity implements OnClickListener public void onCreate Button btn Button findViewById R id btn_valider btn setOnClickListener this Js public void onClick View btn faire quelque chose Ici par contre tous les boutons appelleront la m me m thode 3 4 8 Distinction des metteurs Dans le cas o le m me couteur est employ pour plusieurs vues il faut les distinguer en se basant sur leur identitifiant obtenu avec getId 4 public void onClick View v switch v getId case R id btn_valider break case R id btn_effacer break 43 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 3 4 9 v nements des vues courantes Vous devrez tudier la documentation Voici quelques exemples e Button onClick lorsqu on appuie sur le bouton voir sa doc e Spinner OnItemSelected quand on choisit un l ment voir sa doc e RatingBar OnRatingBarChange quand on modifie la note vo
121. t 3 3 Activit s 3 3 1 Pr sentation Voyons maintenant comment fonctionnent les activit s e D marrage cause d un Intent e Apparition masquage sur cran e Terminaison Une activit se trouve dans l un de ces tats e active resumed elle est sur le devant l utilisateur peut jouer avec e en pause paused partiellement cach e et inactive car une autre activit est venue devant e stopp e stopped totalement invisible et inactive ses variables sont pr serv es mais elle ne tourne plus 38 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 onResume onPause onResume onStart onStop onStart ED GE onCreate onDestroy iy FE Figure 22 Cycle de vie 3 3 2 Cycle de vie d une activit Ce diagramme r sume les changement d tats d une activit Voir la figure 22 page 39 3 3 3 v nements de changement d tat La classe Activity re oit des v nements de la part du syst me Android a appelle des fonctions appel es callbacks Exemples onCreate Un Intent arrive dans l application il d clenche la cr ation d une activit dont l interface onPause Le syst me pr vient l activit qu une autre activit est pass e devant il faut enregistrer les informations au cas o l utilisateur ne revienne pas 3 3 4 Squelette d activit Svedinitynt bis deditos rx a OO verride public void onC
122. t application android icon drawable app_icon png gt lt activity android name MainActivity android label string main gt lt activity android name EditActivity android label 0string edit gt lt application gt lt manifest gt lt application gt est la seule branche sous la racine lt manifest gt et ses filles sont des lt activity gt 3 1 3 S curit des applications Chaque application est associ e un UID compte utilisateur Unix unique dans le syst me Ce compte les prot ge les unes des autres Cet UID peut tre d fini dans le fichier AndroidManifest xml lt xml version 0 encoding utf 8 gt lt manifest android sharedUserld fr iutlan demos gt lt manifest gt 32 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 D finir l attribut android sharedUserId avec une cha ne identique une autre application et signer les deux applications avec le m me certificat permet l une d acc der l autre 3 1 4 Autorisations d une application Une application doit d clarer les autorisations dont elle a besoin acc s internet cam ra carnet d adresse GPS etc Cela se fait en rajoutant des lements dans le manifeste lt manifest gt lt uses permission android name android permission INTERNET gt lt manifest gt Consulter cette page pour la liste des permissions existantes 3 1 5 D marrage d une application
123. t2 0 options toujours mettre 0 setListAdapter adapter 6 3 5 Ouverture de la base et cr ation d un chargeur Ensuite toujours dans la m thode onCreate de l activit on ouvre la base ici en consultation car cette activit ne modifie pas les donn es puis on cr e un chargeur associ this identifiant du chargeur utile s il y en a plusieurs private static final int LOADER ID 1 ouvrir la base de donn es SQLite helper new MySQLiteHelper this bdd helper getReadableDatabase cr e et d marre un chargeur pour cette liste getLoaderManager initLoader LOADER_ID null this Cette derni re instruction exige de d finir trois callbacks dans l activit onLoadFinished et onLoaderReset Voyons d abord la premi re 6 3 6 Callback onCreateLoader de l activit Toujours dans la classe d activit qui affiche la liste amp Override public Loader lt Cursor gt onCreateLoader int loaderID Bundle bundle return new MonCursorLoader getApplicationContext bdd db onCreateLoader Cette callback fait instancier un MonCursorLoader qui est une sous classe de CursorLoader d finie dans notre application Son r le est de lancer la requ te qui retourne le curseur contenant les donn es afficher 6 3 7 classe MonCursorLoader y static private class MonCursorLoader extends CursorLoader private SQLiteDatabase bdd public MonCursorLoader Context context S
124. te savedInstanceState setContentView R layout main Override signifie que onCreate surcharge cette m thode de la superclasse et il faut aussi l appeler sur super 2 1 3 Identifiant de ressource La m thode setContentView sp cifie l identifiant de l interface afficher dans l cran R layout main C est un entier identifiant d une disposition de vues un layout Le SDK Android aapt g re un dossier gen contenant une classe statique appel e R Elle ne contient que des constantes enti res 19 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 package fr iutlan helloworld public final class R public static final class id public static final int texte 0x7f080000 public static final class layout public static final int main 0x7f030000 2 1 4 La classe R Cette classe R est g n r e automatiquement par ce que vous mettez dans le dossier res dispositions identifiants cha nes Les dispositions et autres sont d finies par des fichiers XML Par exemple res values strings xml lt xml version 1 0 encoding utf 8 gt lt resources gt lt string name app_name gt Exemple lt string gt lt string name message gt Bonjour lt string gt lt resources gt 2 1 5 Rappel sur la structure d un fichier XML Un fichier XML n uds racine l ments attributs valeurs texte lt xml version 1 0 encoding utf 8 gt lt racine gt lt comme
125. thode onCreateView du fragment il faut rajouter setHasOptionsMenu true 5 3 9 Int grer un fragment dans une activit De lui m me un fragment n est pas capable de s afficher Il ne peut appara tre que dans le cadre d une activit comme une sorte de vue interne On peut le faire de deux mani res e statiquement les fragments afficher sont pr vus dans le layout de l activit C est le plus simple faire et comprendre e dynamiquement les fragments sont ajout s enlev s ou remplac s en cours de route selon les besoins 5 3 10 Fragments statiques dans une activit Dans ce cas c est le layout de l activit qui inclut les fragments p ex res layout land main_activity xml Ils ne peuvent pas tre modifi s ult rieurement amp lt LinearLayout android orientation horizontal gt lt fragment android id id frag liste android name fr iutlan fragments ListeFragment en 2 lt fragment android id id frag infos android name fr iutlan fragments InfosFragment gt lt LinearLayout gt Chaque fragment doit avoir un identifiant et un nom complet 5 3 11 FragmentManager Pour d finir des fragments dynamiquement on fait appel au FragmentManager de l activit Il g re l affichage des fragments L ajout et la suppression de fragments se fait l aide de transactions C est simplement l association entre un r ceptacle un FrameLayout vide et un fragment 70
126. tions Log e Log i String tag String message affiche une info e Log w String tag String message affiche un avertissement e Log e String tag String message affiche une erreur 1 5 8 Logiciel ADB Android Debug Bridge est une passerelle entre une tablette r elle ou virtuelle et votre PC e Serveur de connexion des tablettes e Commande de communication ADB emprunte FTP transfert de fichiers et SSH connexion un shell 15 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 1 5 9 Mode d emploi de ADB En ligne de commande adb commande param tres e Gestion du serveur adb start server d marre le serveur adb kill server arr te le serveur adb devices liste les tablettes connect es Exemple CoursAndroid adb devices List of devices attached emulator 5554 device c1608df1b170d4f device CoursAndroid 1 5 10 Mode d emploi suite Chaque tablette device poss de un identifiant ex c1608df1b170d4f ou emulator 5554 qu il faut fournir aux commandes adb l aide de l option s Par d faut c est la seule tablette active qui est concern e e Connexion un shell adb s identifiant shell commande unix ex cute la commande sur la tablette adb s identifiant shell ouvre une connexion de type shell sur la tablette Ce shell est un interpr teur sh simplifi type busybox l int rieur du syst me Unix de la tablette Il
127. types query db gt prepare SELECT FROM Types ORDER BY _id query gt execute encodage JSON de toutes les r ponses echo json_encode query gt fetchAl1 PDO FETCH_NUM 6 5 5 Format JSON JavaScript Object Notation C est un format pour transporter des tableaux et des objets travers le r seau Ils sont crits sous forme d un texte JSON est une alternative au XML Par exemple la liste des n uplets pr sents dans la table Types amp Cli Repas 2 Sport 4 Sorties 6 Fringues oviransports ll En PHP c est tr s simple amp encodage tableau gt jsondata jsondata json_encode tableau d codage jsondata gt tableau tableau json_decode jsondata Le tableau peut venir d un fetchA11 PDO FETCH_NUM 6 5 6 JSON en Java En Java c est plus compliqu Il faut employer une instance de JSONArray Elle poss de des setters et des getters pour chaque type de donn es amp encodage tableau gt jsondata int tabla JSONArray ja new JSONArray for int v tableau ja put v String jsondata ja toString d codage jsondata gt tableau JSONArray ja new JSONArray jsondata final int nb ja length int tableau new int nb for int i 0 i lt nb i tableauli ja getInt i C est adapter aux donn es a changer entiers cha nes 92 IUT de Lannion P Nerzic Dept Informatique Programmation Android 20
128. u clic en coordonn es g ographiques 4 verride public boolean onLongPress MotionEvent event MapView map if event getAction MotionEvent ACTION DOWN Projection projection map getProjection GeoPoint position GeoPoint projection fromPixels int event getX int event getY IL ULIUESEr DOS DE LON oo Jr return true Par exemple elle cr e ou d place un marqueur 7 3 20 Voil tout pour cette semaine C est fini pour cette semaine rendez vous la semaine prochaine pour un cours sur le dessin en 2D 109 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 8 Dessin 2D interactif Le cours de cette semaine concerne le dessin de figures 2D et les interactions avec l utilisateur e CustomView et Canevas e Un exemple de bo te de dialogue utile Figure 44 Application de dessin 8 1 Dessin en 2D 8 1 1 Principes Une application de dessin 2D d finit une sous classe de View et surcharge sa m thode onDraw c est elle qui est appel e pour dessiner la vue Voici le squelette minimal t package fr iutlan dessin public class DessinView extends View Paint mPeinture public DessinView Context context AttributeSet attrs super context attrs mPeinture new Paint mPeinture setColor Color BLUE public void onDraw Canvas canvas canvas drawCircle 100 100 50 mPeinture 8 1 2 Layout pour le dessin Pour voir DessinView il faut
129. u recommand Les dp sont une unit de taille ind pendante de l cran 100dp font 100 pixels sur un cran de 100 dpi 100 dots per inch tandis qu ils font 200 pixels sur un cran 200dpi Ca fait la m me taille apparente 2 2 6 Autres param tres g om triques Il est possible de modifier l espacement des vues Padding espace entre le texte et les bords g r par chaque vue Margin espace autour des bords g r par les groupes padding gt lt lt margin Figure 19 Bords et marges 2 2 7 Marges et remplissage On peut d finir les marges et les remplissages s par ment sur chaque bord Top Bottom Left Right ou identiquement sur tous amp 25 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt Button android layout margin 10dp android layout marginTop 15dp android padding 10dp android paddingLeft 20dp gt 2 2 8 Groupe de vues LinearLayout Il range ses vues soit horizontalement soit verticalement amp lt LinearLayout android orientation horizontal android layout_width match_parent android layout_height wrap_content gt lt Button android text 0k android layout_weight 1 android layout_width wrap_content android layout_height wrap_content gt lt Button android text Annuler android layout_weight 1 android layout_width wrap_content android layout_height wrap_content gt lt LinearLayout gt Il faut seulement d finir l attribut a
130. ure 18 Arbre de vues 2 2 3 Repr sentation en XML Cet arbre s crit en XML lt LinearLayout android id id groupei gt lt TextView android id id titre gt lt EditText android id id saisie gt lt LinearLayout android id id groupe2 gt lt Button android id id ok gt lt Button android id id raz gt lt Button android id id annuler gt lt LinearLayout gt lt LinearLayout gt 24 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 2 2 4 Param tres de positionnement La plupart des groupes utilisent des param tres de placement sous forme d attributs XML Par exemple telle vue droite de telle autre telle vue la plus grande possible telle autre la plus petite Ces param tres sont de deux sortes e ceux qui sont demand s pour toutes les vues par exemple android layout width android layout_height et android layout_weight e ceux qui sont demand s par le groupe englobant et qui en sont sp cifiques comme android layout_alignParentBottom android layout_centerInParent 2 2 5 Param tres g n raux Toutes les vues doivent sp cifier ces deux attributs android layout_width largeur de la vue android layout_height hauteur de la vue Ils peuvent valoir e wrap_ content la vue est la plus petite possible e match parent la vue est la plus grande possible e valeurdp une taille fixe ex 100dp mais c est pe
131. ut gt lt TextView android text Demat gt lt RelativeLayout gt qui est r f renc par son identifiant R layout nom_du_fichier dans le programme Java protected void onCreate Bundle bundle super onCreate bundle setContentView R layout main 2 1 9 Ressources de type cha nes Dans res values strings xml on place les cha nes de l application au lieu de les mettre en constantes dans le source lt xml version 1 0 encoding utf 8 gt lt resources gt lt string name app_name gt HelloWorld lt string gt 21 IUT de Lannion P Nerzic Dept Informatique Programmation Android 2014 15 lt string name main_menu gt Menu principal lt string gt lt string name action_settings gt Configuration lt string gt lt string name bonjour gt Demat lt string gt lt resources gt Int r t pouvoir traduire une application sans la recompiler 2 1 10 R f rencement des ressources texte Voici comment affecter une ressource cha ne une vue en Java TextView tv new TextView ctx tv setText R string bonjour Voici comment sp cifier un titre de label dans un layout xml lt RelativeLayout gt lt TextView android text string bonjour gt lt RelativeLayout gt string nom signifie la cha ne de res values strings xml ayant ce nom 2 1 11 Identifiants et vues La m thode setContentView fait afficher le formulaire d fini par l identifiant R layout indiqu Lorsqu
132. yles xml e res values vii styles xml e res values vi4 styles xml En r sum il faut indiquer que votre application g re les barres d action Voici par exemple pour la Vil y lt resources gt lt style name AppBaseTheme parent android Theme Holo Light gt lt resources gt Utiliser l assistant pour avoir les th mes ad quats 5 1 6 couteurs pour les menus Il faut programmer deux m thodes L une affiche le menu l autre r agit quand l utilisateur s lectionne un item Voici la premi re s 61 IUT de Lannion Dept Informatique Programmation Android P Nerzic 2014 15 Override public boolean onCreateOptionsMenu Menu menu getMenuInflater inflate R menu nom_du_menu menu return true Cette m thode rajoute les items du menu d fini dans le XML Un Menulnflater est un lecteur traducteur de fichier XML en vues sa m thode inflate cr e les vues 5 1 7 R actions aux s lections d items Voici la seconde callback c est un aiguillage selon litem choisi 4 verride public boolean onOptionsItemSelected Menultem item switch item getItemId case R id menu_creer return true case R id menu_chercher return true default return super on0ptionsItemSelected item 5 1 8 Menus en cascade D finir deux niveaux quand la barre d action est trop petite 4 lt menu xmlns android gt lt item android id id menu_itemi gt lt item android id
Download Pdf Manuals
Related Search
Related Contents
SoftBank 105SH お願いとご注意 Herunterladen PNY VCQK6000SDI-PB NVIDIA Quadro K6000 12GB graphics card user manual - Neil Pryde 取扱説明書ダウンロード Copyright © All rights reserved.
Failed to retrieve file