Bibliographie utilisée



Documents pareils
TP SIN Programmation sur androïde Support : eclipse

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

TP au menu «UI ANDROID»

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Projet Android (LI260) Cours 2

Tutorial pour une application simple

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

SOMMAIRE

Programmation mobile avec Android

De Java à Android version 0.1

1.3 Gestion d'une application

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

TP2 : Client d une BDD SqlServer

Développement Android. J.-F. Couchot

Warren PAULUS. Android SDK et Android x86

Android UIThread, Thread, Handler et AsyncTask

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Tutoriel Android - TP de prise en main

Créer des applications Android

Les fondamentaux du développement d applications Java

Education Delivery Intelligent Tool

[Projet S9] Rédacteurs & Contributeurs Entité Rédacteurs Contributeurs Imededdine HOSNI Olivier MARTY. Validation du document Nom Date Visa

Tutoriel Android. Pour démarrer la programmation d'applications Android

Encore plus de widgets et de conteneurs

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TP1 : Initiation à Java et Eclipse

Applet pour visualiser les variables «automate» notifiées

Programmation Android L3 informatique

Android et le Cloud Computing

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

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Création d un service web avec NetBeans 5.5 et SJAS 9

Web Tier : déploiement de servlets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Remote Method Invocation (RMI)

Android en action. Abdelkader Lahmadi Université de Lorraine

La base de données XML exist. A. Belaïd

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Alfstore workflow framework Spécification technique

Programmation Par Objets

Développement Logiciel

Développement sous Android

Android 101. Rémi Forax

TD/TP 1 Introduction au SDK d Android

Auto-évaluation Programmation en Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

BIRT (Business Intelligence and Reporting Tools)

Les connexions sans fil avec Android. JMF (Tous droits réservés) 1

Interfaces graphiques avec l API Swing

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Tutoriel d installation de Hibernate avec Eclipse

Bases Java - Eclipse / Netbeans

Remote Method Invocation Les classes implémentant Serializable

Calcul Parallèle. Cours 5 - JAVA RMI

TP1 : Initiation à Java et Eclipse

Environnements de développement (intégrés)

RMI le langage Java XII-1 JMF

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Création d une application JEE

APPLICATIONS JAVA. 1. Android. Développement d'activités Java sous Android. Android Partie I. L'architecture du système Android. Application Android

Corrigé des exercices sur les références

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

Génie Logiciel et Interaction Homme-Machine PROJET UCAMPUS

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Programmer en JAVA. par Tama

Design patterns. Design patterns - définition. Design patterns - avantages

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Introduction ANDROID

Dis papa, c est quoi un bus logiciel réparti?

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Approche Contract First

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

Programmation Objet Java Correction

Table des matières. Partie I Concepts de base Préface... VII

Épisode 2 : Les outils de développement Alain Menu édition 2.1, septembre 2013

Table des matières Introduction Démarrage Les composants graphiques... 26

Banque d images SVT. Créer et utiliser une banque d images avec Picasa 2. Version anglaise -Windows 98. Banque photo en SVT : page 1 /14

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Manuel d'installation de GESLAB Client Lourd

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

< Atelier 1 /> Démarrer une application web

Architectures Mobiles

Mode d emploi : Module SMS

Générer du code à partir d une description de haut niveau

Android. Android is an environment where the biggest limitation is your imagination. P1 1

Introduction à Eclipse

Synchro et Threads Java TM

Introduction au langage Java

WINDOWS SHAREPOINT SERVICES 2007

TD/TP PAC - Programmation n 3

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Installer et configurer Oracle Forms 11gR2 Windows 7 64 bits

Projet Active Object

Surveiller sa maison via son Smartphone sous Android

Desktop Intégration. Rémi Forax

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

S T L - C P S - L e s p l u g i n s E c l i p s e. - Une Introduction , Frédéric Peschanski

Projet de programmation (IK3) : TP n 1 Correction

Transcription:

Android View, onclick, Activity, Modèle Vue Contrôleur jean-michel Douin, douin au cnam point fr version : 26 Septembre 2012 Notes de cours 1 Bibliographie utilisée http://developer.android.com/resources/index.html Android : Développer des applications mobiles pour les Google Phones, de Florent Garin, chez Dunod Le cours de Victor Matos http://grail.cba.csuohio.edu/~matos/notes/cis-493/android-syllabus.pdf Android A Programmers Guide - McGraw Hill Professional Android Application Development Wrox http://marakana.com/bookshelf/main_building_blocks_tutorial/table_of_contents.html 2 Page 1

Avertissement, pré-requis et sommaire Pré requis indispensable Avoir réalisé le tp mvc, Un tp utilisant une calculette à pile Au sommaire Comment assurer un couplage faible des classes Observable/Observateur IHM/Vue et Listener/Contrôleur 3 Pré requis, rappel Pré requis TP Calculette à pile déjà réalisé J2SE Thème : Modèle Vue Contrôleur http://jfod.cnam.fr/eicnam/tp_mvc/tp_mvc.html Usage de l applette à cette URL est conseillée >appletviewer http://jfod.cnam.fr/eicnam/tp_mvc/tp_mvc.html 4 Page 2

Pré requis, MVC http://java.sun.com/blueprints/guidelines/designing_enterprise_applications/introduction/summary/index.html 5 Pré requis, l architecture retenue pour le TP Le Modèle est une pile (classe PileModele<T>). La Vue correspond à l'affichage de l'état de la pile (classe Vue). Le Contrôleur gère les évènements issus des boutons +, -, *, /,[] (classe Controleur). L'applette crée, assemble le modèle, la vue et le contrôle (classe AppletteCalculette). 6 Page 3

Cette architecture engendre des discussions Le Modèle est ici une pile (classe PileModele<T>). La Vue correspond à l'affichage de l'état de la pile (classe Vue). Le Contrôleur gère les évènements issus des boutons +, -, *, /,[] L'applette crée, assemble le modèle, la vue et le contrôle (classe AppletteCalculette). 7 Discussions entre nous Le modèle pourrait être la calculette constituée pour ses calculs internes d'une pile, Pourquoi les "listeners" des boutons sont-ils locaux au contrôleur? Pourquoi un JPanel pour le contrôleur? Ce choix de découpage MVC vous parait-il réaliste? Discussion, blabla, blabla, blabla 8 Page 4

Architecture classique une valeur sûre L utilisateur clique L utilisateur visualise Ici le Modèle hérite de java.util.observable La Vue implemente java.util.observer 9 MVC encore Model extends Observable View implements Observer Controller implements XXXXListener, YYYYListener 10 Page 5

Nouvelle architecture En conséquence Au tp Le Modèle est une pile (classe PileModele<T>). La Vue correspond à l'affichage de l'état de la pile (classe Vue). Le Contrôleur gère les évènements issus des boutons +, -, *, /,[]. Architecture retenue Le Modèle est une calculette La Vue correspond à l IHM (au complet). Le Contrôleur gère les évènements issus des boutons +, -, *, /,[] 11 Architecture retenue Le Modèle La calculette munie de ses opérations (+,-,/,*, ) Hérite de la classe java.util.observable Les sources du modèle sont ici http://douin.free.fr/tp4calculette/ La Vue L IHM affichage, zone de saisie, boutons Implémente java.util.observer Le Contrôleur Réalisation, implémentation des listeners, (le comportement de l IHM) Implémente plusieurs ActionListener -> pour Android, quel découpage?, quelles classes? 12 Page 6

Android, la classe Activity Activité comme application élémentaire À cette activité lui correspond une IHM, ce que l on voit public class Calculette extends Activity { Cette IHM est décrite par un fichier XML (la vue) L activité réagit aux sollicitations de l utilisateur (le contrôleur) 13 L IHM de la calculette Un fichier XML décrit complètement cette interface L activité Calculette affiche, présente cette interface 14 Page 7

Android, la calculette L activité affiche l IHM Le modèle ne change pas Cf. le TP Android : Démonstration 15 IHM : Layout, View, Button LinearLayout TextView EditText TableRow Button ProgressBar Description de cette interface en XML Fichier res/layout/main.xml 16 Page 8

Interface, IHM : Approche déclarative./res/ Chaque composant possède un id (android:id= "@+id/push") 17 Chaque composant a son id etatpile donnee jauge push plus sub mul TableRow clear div <Button android:id="@+id/push" 18 Page 9

IHM, un outil de conception sous eclipse Item comme classe Nom de la balise comme Nom de la classe Properties de chaque item Attribut XML, cf. Properties comme Mais aussi comme Attribut de la classe, 19 Adéquation XML <-> java, le fichier R En XML <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:enabled="true" android:visibility="visible" android:clickable="false" android:layout_margin="5dip" android:numeric= "decimal" android:inputtype= "number" android:id="@+id/donnee" android:text="1" /> <Button android:id="@+id/push" En Java EditText donnee = (EditText) findviewbyid(r.id.donnee); Button empiler = (Button) findviewbyid (R.id.push); 20 Page 10

Intégration de l IHM, R.layout.main Au sein d une Activity XML : accès en java via R Les ressources XML sont accessibles via le fichier R R.java est généré par Android Convention : /layout/main -> R.layout.main, R.id.»R cf. dossier /gen/ R.string. 21 Intégration de l IHM, R.layout.main Au sein d une Activity Au préalable l affectation de l interface par l appel de setcontentview(r.layout.main); Les composants de l IHM deviennent accessibles Button empiler = (Button) findviewbyid(r.id.push); findviewbyid est une méthode héritée de la classe Activity Le source java ne manquera pas de R, ni d appels de R (facile ) 22 Page 11

Une Activity, «démarrage» par oncreate public class TPCalculette extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // Affectation de l IHM issue des fichiers XML setcontentview(r.layout.main); 23 Une Activity accès aux composants public class TPCalculette extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); // accès aux composants de l IHM Button empiler = (Button) findviewbyid(r.id.push); ProgressBar jauge = (ProgressBar) findviewbyid(r.id.jauge); // accès aux chaînes de caractères ( plusieurs langues) String str = getstring(r.string.app_name); 24 Page 12

Comportement : OnClickListener et plus Un seul «Listener» par composant Button empiler = (Button) findviewbyid(r.id.push); empiler.setonclicklistener(new View.OnClickListener(){ public void onclick(view v){ // traitement associé } } 25 Ou bien usage de l Attribut onclick Extrait de layout/main.xml <Button android:layout_height="wrap_content" android:id="@+id/push" android:layout_width="wrap_content" android:text="@string/push" android:onclick="onclickempiler"> </Button> Dans la classe de l activity public void onclickempiler(view v){ // traitement associé } 26 Page 13

Démonstration Une démonstration Avec au moins un bouton de bienvenue À chaque clic la chaîne hello world est modifiée 27 Android : la description de l application Description de l application Quelles activités? Plusieurs activités pour une application Quelles permissions? SMS, Réseau, GPS, Quelles librairies? Dans un fichier XML AndroidManifest.xml 28 Page 14

AndroidManifest.xml, tp4calculette La description de l application, destinée à l hébergeur 29 MVC et Android Nous avons : Une IHM décrite en XML Une activité qui implémente le comportement Alors L activité est le contrôleur de la vue, de l IHM décrite en XML L activité met l IHM au premier plan, l activité a accès aux composants graphiques MVC? Le modèle est une calculette La vue du modèle est l activité 30 Page 15

MVC, Mise en Pratique : discussions Calculette Modèle extends java.util.observable implements CalculetteI update(.. enter, add, sub, «XML» IHM Activity Contrôleur Listeners extends Activity implements java.util.observer L activity Android est une vue du Modèle Calculette (implements Observer) L activity Android est le contrôleur de l IHM décrite en XML (extends Activity) 31 packages mode modèle 32 Page 16

Le Modèle : la Calculette public interface CalculetteI { // operations void enter(int i) throws CalculetteException; void add() throws CalculetteException; void sub() throws CalculetteException; void div() throws CalculetteException; void mul() throws CalculetteException; void clear(); int pop() throws CalculetteException; // interrogations int result() throws CalculetteException; boolean isempty(); boolean isfull(); int size(); int capacity(); } public class Calculette extends java.util.observable implements CalculetteI 33 TP4CalculetteActivity, la vue du modèle + le Contrôleur de l IHM public class Tp4CalculetteActivity extends Activity implements Observer{ private Calculette calculette; public void oncreate(bundle savedinstancestate) { // appelée par Android super.oncreate(savedinstancestate); this.calculette = new Calculette(); // une calculette est créée this.calculette.addobserver(this); // c est une vue du modèle calculette setcontentview(r.layout.main); // l IHM est associée à cette activité. } public void onclickempiler(view v){ } public void update(observable arg0, Object arg1) { } // attribut onclick balise <Button // à chaque notification 34 Page 17

TP4CalculetteActivity, le Contrôleur de l IHM public class Tp4CalculetteActivity extends Activity implements Observer{ private Calculette calculette; public void oncreate(bundle savedinstancestate) {. } public void onclickempiler(view v){ try{ int operande = this.calculette.empiler(operande); }catch(calculetteexception nfe){} } // appelée par Android // attribut onclick balise <Button // opération empiler sur le modèle public void onclickadd(view v){ public void update(observable arg0, Object arg1) { } // à chaque notification 35 TP4CalculetteActivity, est une vue du modèle public class Tp4CalculetteActivity extends Activity implements Observer{ private Calculette calculette; public void oncreate(bundle savedinstancestate) {. } public void onclickempiler(view v){ } // appelée par Android // attribut onclick public void update(observable arg0, Object arg1) { // à chaque notification du TextView etat = (TextView) findviewbyid(r.id.etatpile); // modèle etat.settext(calculette.tostring()); ProgressBar jauge = (ProgressBar) findviewbyid(r.id.jauge); jauge.setprogress(calculette.size()); actualiserinterface(); } 36 Page 18

Architecture retenue Application Calculette en résumé Observable : Le modèle, la calculette Observer : l Activity, mise à jour de l interface View : le fichier XML (l IHM) Controller : l Activity 37 Android, la calculette Discussion, réalisation 38 Page 19

Android et MVC, discussion Calculette Modèle extends java.util.observable implements CalculetteI update(.. enter, add, sub, «XML» IHM Activity Contrôleur Listeners extends Activity implements java.util.observer public class CalculetteActivity extends Activity implements Observer{ 39 Comportements attendus, cycle de vie 3 + 2 == 5? Appui sur la touche «retour» Fin de l activité Appui sur la touche «HOME» L activité est en Pause Pendant que je calcule 3 + 2, je reçois un urgent appel téléphonique telnet localhost 5554 gsm call 5554 Une rotation de l écran a lieu http://developer.android.com/guide/developing/tools/emulator.html Ctrl-F11, Ctrl-F12 40 Page 20

Cycle de vie d une activity, je calcule. 41 Cycle de vie d une activity, j ai fini. 42 Page 21

Cycle de vie d une activity, je lance une autre activity. 43 Cycle de vie d une activity, je calcule de nouveau. 44 Page 22

Cycle de vie d une activity, un appel urgent telnet localhost 5554 gsm call 5554. 45 Cycle de vie d une activity, je réponds. 46 Page 23

Cycle de vie d une activity, je raccroche. 47 Illustration du cycle de vie Illustration du cycle de vie Démonstration Touche «Retour» onpause, ondestroy.ok Touche Menu onsaveinstancestate, onpause, onstop...ok Sauvegarde par défaut Un appel idem Rotation de l écran Ctrl-F11, Ctrl-F12!!! Android détruit votre vue en cas de rotation pour construire la nouvelle vue 48 Page 24

Cycle de vie d une activity, onsaveinstancestate. 49 Cycle de vie d une activity, onrestoreinstancestate. 50 Page 25

Mise en Pratique, suite Suite du TP : Sauvegarde de l état de la calculette Cf. cycle de vie protected void onsaveinstancestate(bundle out){ out.putint("taille",calculette.size()); protected void onrestoreinstancestate(bundle in){ int taille = in.getint("taille"); Sauvegarde et restitution via le bundle http://developer.android.com/reference/android/os/bundle.html 51 Cycle de vie d une activity http://www.itcsolutions.eu/wp-content/uploads/2011/08/android_activity_events-copy.png 52 Page 26

Illustration du cycle de vie Ecran de veille alors que la calculette était au premier plan onpause Noté semi-visible dans la biblio 53 Cycle de vie d une activity, écran de veille, touche F7. 54 Page 27

Cycle de vie d une activity, au réveil, touche F7. 55 Un extra pour la calculette A chaque mauvais format du nombre, un sms est envoyé! Une exception Over The Air 1) l activité Calculette envoie le SMS SmsManager sm = SmsManager.getDefault(); Si j ai la permission 2) L activité standard d envoi de SMS est appelée Intent sendintent = new Intent(Intent.ACTION_VIEW); startactivity(sendintent); 56 Page 28

Au sein de votre application private void sendsms(string msg){ try{ SmsManager sm = SmsManager.getDefault(); String body = getstring(r.string.app_name) + " : " + msg + "\n"; sm.sendtextmessage(getstring(r.string.numero_tel), null, body, null, null); // ou bien un Toast Toast.makeText(getBaseContext(), " envoi d un sms " + msg, Toast.LENGTH_LONG).show(); }catch(exception e){ Toast.makeText(getBaseContext(), getstring(r.string.erreur), Toast.LENGTH_LONG).show(); } } Mais avez-vous la permission?, -> AndroidManifest 57 Une Activity en démarre une autre Intent ou comment transmettre des paramètres à une activité Intent sendintent = new Intent(Intent.ACTION_VIEW); sendintent.putextra("sms_body", "The SMS text"); sendintent.settype("vnd.android-dir/mms-sms"); startactivity(sendintent); Une pile d activité en interne Cycle de vie 58 Page 29

Cycle de vie d une activity, startactivity(sendintent);. 59 Cycle de vie d une activity, sms envoyé +. 60 Page 30

Quelques remarques Attention à la persistance Lorsque l activité est en Pause ou Stoppée Android peut décider de supprimer l activité 61 Cycle de vie d une activity, android killer. 62 Page 31

Cycle de vie d une activity, android killer 63 L architecture se précise Une Activity peut en déclencher une autre A chaque activity son écran (son fichier XML) Nécessaire gestion de ces activités, android utilise une pile 64 Page 32

Extension possible : à chaque exception un sms! Trop de sms. Un mauvais format de Nombre Contrôle de la saisie android:numeric="decimal" android:inputtype="number" 65 La pile des Activity http://www.vineetgupta.com/2011/03/mobile-platforms-part-1-android/ http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html 66 Page 33

Annexe : un tutorial http://www.itcsolutions.eu/2011/08/26/android-tutorialoverview-and-contents/ http://www.itcsolutions.eu/2011/08/27/android-tutorial-4- procedural-vs-declarative-design-of-user-interfaces/ 67 http://good-good-study.appspot.com/blog/posts/103001 68 Page 34

http://www.itcsolutions.eu/2011/08/27/android-tutorial-4-procedural-vs-declarative-design-of-user-interfaces/ 69 70 Page 35

Vocable 71 Vocable 72 Page 36