Programmation de composant mobiles aka Android



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

TP2 : Client d une BDD SqlServer

TP SIN Programmation sur androïde Support : eclipse

Projet Android (LI260) Cours 2

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

Stockage de données sous Android

Projet de programmation (IK3) : TP n 1 Correction

TP au menu «UI ANDROID»

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

Certificat Big Data - Master MAthématiques

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

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

Tutorial pour une application simple

Programmation Par Objets

Programmation système I Les entrées/sorties

Développement Logiciel

Développement Android. J.-F. Couchot

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

as Architecture des Systèmes d Information

.NET - Classe de Log

Warren PAULUS. Android SDK et Android x86

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

Création d objet imbriqué sous PowerShell.

Comment paramétrer et sauvegarder les configurations d Altium Designer?

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

Une introduction à la technologie EJB (2/3)

Langage Java. Classe de première SI

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

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmation Orientée Objet Java

1.3 Gestion d'une application

Programmer en JAVA. par Tama

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Package Java.util Classe générique

Les fondamentaux du développement d applications Java

1. Base de données SQLite

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

De Java à Android version 0.1

Plan du cours. Historique du langage Nouveautés de Java 7

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Programme Compte bancaire (code)

Créer des applications Android

Programmation en Java IUT GEII (MC-II1) 1

Introduction ANDROID

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

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Bases Java - Eclipse / Netbeans

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Votre premier projet Android

TD3: tableaux avancées, première classe et chaînes

Java Licence Professionnelle CISII,

Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

Education Delivery Intelligent Tool

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Gestion des différentes tailles d écran

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

SOMMAIRE

Introduction à ElasticSearch

Programmation système de commandes en C

Programmation avec des objets : Cours 7. Menu du jour

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

Utilisation d objets : String et ArrayList

Introduction à la programmation concurrente

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Une introduction à Java

Apprendre Java en 154 minutes

Programmation client-serveur sockets - RPC

OpenPaaS Le réseau social d'entreprise

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Tp 1 correction. Structures de données (IF2)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Programmation par les Objets en Java

Projet gestion d'objets dupliqués

Cours Bases de données 2ème année IUT

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Nuxeo 5.4 : les nouveautés

4. Groupement d objets

Introduction : les processus. Introduction : les threads. Plan

Le système de gestion des fichiers, les entrées/sorties.

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

BIRT (Business Intelligence and Reporting Tools)

Cours 8 Not Only SQL

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Exercices INF5171 : série #3 (Automne 2012)

Synchro et Threads Java TM

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

7 Développement d une application de MapReduce

Application de lecture de carte SESAM-Vitale Jeebop

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Cours 1: Java et les objets

Introduction au langage Java

Transcription:

Programmation de composant mobiles aka Android Wies law Zielonka October 8, 2015

ListView et ArrayAdapter / r e c u p e r e r un t a b l e a u de S t r i n g a p a r t i r de r e s s o u r c e s / R e s o u r c e s r e s = g e t R e s o u r c e s ( ) ; f i n a l S t r i n g [ ] c o l o r s = r e s. g e t S t r i n g A r r a y (R. a r r a y. c o l o r s ) ; / c r e e r un a d a p t e r / ArrayAdapter a d a p t e r = new ArrayAdapter <S t r i n g >( t h i s, R. l a y o u t. t e x t v i e w, c o l o r s ) ; / r e c u p e r e r L i s t V i e v from l e f i c h i e r l a y o u t de l a c t i v i L i s t V i e w l v = ( L i s t V i e w ) f i n d V i e w B y I d (R. i d. l i s t V i e w ) ; / c o n n e c t e r L i s t V i e w avec a d a p t e r / l v. s e t A d a p t e r ( a d a p t e r ) ;

ListView dans un layout de Activity Le fichier xml de layout de l activité qui affiche ListView contient un élément pour ListView : <L i s t V i e w a n d r o i d : l a y o u t w i d t h= w r a p c o n t e n t a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t a n d r o i d : i d= @+i d / l i s t V i e w a n d r o i d : l a y o u t m a r g i n T o p= 100 dp />

Les ressources avec un tableau de String Le tableau colors est définie dans le fichier app/res/values/strings.xml: <r e s o u r c e s> <s t r i n g a r r a y name= c o l o r s > <item>orange</ item> <item>b l u e</ item> <item>r e d</ item> <item>g r e e n</ item> <item>b l a c k</ item> <item>w h i t e</ item> <item>g r e y</ item> <item>y e l l o w</ item> <item> v i o l e t</ item> <item>p i n k</ item> <item>brun</ item> <item>l a z u r e</ item> </ s t r i n g a r r a y> <! d a u t r e s d e f i n i t i o n s de s t r i n g > </ r e s o u r c e s >

Layout pour une ligne de ListView Le deuxième paramètre du constructeur de ArrayAdapter est un layout qui décrit une ligne de tableau. le même layout sera utilisé pour affichage de chaque ligne. Le fichier xml correspondant app/res/layout/textview.xml : <?xml v e r s i o n= 1. 0 e ncoding= utf 8?> <TextView x m l n s : a n d r o i d= h t t p : // schemas. a n d r o i d. com/ apk / a n d r o i d : l a y o u t w i d t h= match parent a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t a n d r o i d : t e x t S i z e= 20 sp />

Installer un Listener Installer un listener (lv contient la référence vers l objet ListView - voir le premier transparent) : l v. s e t O n I t e m C l i c k L i s t e n e r (new AdapterView. O n I t e m C l i c k L i s t e n e r ( ) { @Override p u b l i c void o n I t e m C l i c k ( AdapterView <?> parent, View view, i n t p o s i t i o n, long i d ) { Toast. maketext ( M a i n A c t i v i t y. t h i s, c o l o r s [ p o s i t i o n ], Toast. LENGTH LONG ). show ( ) ; } } ) ;

Comment l application peut stocker les données de façon permanente? dans les préférences, dand les fichiers, dans une base de donnée (SQLLite).

Préférences Pour stocker les préférences la classe PreferenceActivity. Mais la version moderne utilise les fragments donc ne sera pas traitée aujourd hui. La classe SharedPreferences permet de stocker les données primitives sous forme de couples (clé, valeur), où la clé est une chaîne de caractères et valeur - la valeur à stocker.

Obtenir l objet SharedPreferences Utiliser la méthode S h a r e d P r e f e r e n c e s g e t S h a r e d P r e f e r e n c e s ( S t r i n g nom, i n t mode ) de la classe Context. Rappel: chaque View est un Context. Les paramètres : nom le nom du fichier où l application stocke les préférences, mode une de constantes : 1. Context.MODE PRIVATE 2. Context.MODE WORLD READABLE 3. Context.MODE WORLD WRITABLE

Lire les préférences Pour lire une préférence on utilise une des méthodes get de la classe SharedPreferences : boolean getboolean ( S t r i n g key, boolean d e f V a l u e ) f l o a t g e t F l o a t ( S t r i n g key, f l o a t d e f V a l u e ) i n t g e t I n t ( S t r i n g key, i n t d e f V a l u e ) long getlong ( S t r i n g key, long d e f V a l u e ) S t r i n g g e t S t r i n g ( S t r i n g key, S t r i n g d e f V a l u e ) Set<S t r i n g > g e t S t r i n g S e t ( S t r i n g key, Set<S t r i n g > d e f V a l u e ) key la clé, defvalue la valuer par défaut retournée si la clé n est pas trouvée.

Écrire ou modifier les préférences D abord il faut obtenir l objet SharedPreferences.Editor grâce à la méthode S h a r e d P r e f e r e n c e s. E d i t o r e d i t ( ) de SharedPreferences. Cet editor possède les méthodes put symétriques aux méthodes get avec les paramètres String pour la clé et valeur pour la valeur stockées.

Valider l écriture/modification de préférences Pour valider les modification apportées par put faire à la fin e d i t o r. a p p l y ( ) ou e d i t o r. commit ( ) où editor l objet SharedPreferences.Editor. La méthode apply() est asynchrone (donc nonbloquante), par contre commit() est bloquante, on préfère la première.

Exemple - écriture de préférences S h a r e d P r e f e r e n c e s p r e f ; p u b l i c s t a t i c f i n a l S t r i n g COULEUR = c o l o r ; p u b l i c f i n a l s t a t i c S t r i n g TEXT SIZE = t e x t s i z e ; p u b l i c s t a t i c f i n a l S t r i n g FICHIER PREFERENCES = f r. l i a f a. z i e l o n k a. p r e f e r e n c e s s i m p l e. PREFERENCES ; / on e s t dans l a c l a s s e P r e f e r e n c e s e x t e n d s A c t i v i t y / p r e f = g e t S h a r e d P r e f e r e n c e s ( FICHIER PREFERENCES, Context. MODE PRIVATE ) ; S t r i n g c o l o r = #FF00FF00 ; i n t t = 20 ; / r e c u p e r e r e d i t o r / S h a r e d P r e f e r e n c e s. E d i t o r e d i t o r = p r e f. e d i t o r ( ) ; / m o d i f i e r / a j o u t e r p r e f e r e n c e s / e d i t o r. p u t I n t ( TEXT SIZE, t ) ; e d i t o r. p u t S t r i n g (COULEUR, c o l o r ) ; e d i t o r. a p p l y ( ) ; / v a l i d e r /

Exemple Lire les préférences Lecture de préférences dans une autre Activity de la même application : S h a r e d P r e f e r e n c e s p r e f ; p r e f=g e t S h a r e d P r e f e r e n c e s ( P r e f e r e n c e s. FICHIER PREFERENCES, Context. MODE PRIVATE ) ; S t r i n g c o l o r = p r e f. g e t S t r i n g ( P r e f e r e n c e s.couleur, #FFFFFFFF ) ; i n t n = p r e f. g e t I n t ( P r e f e r e n c e s. TEXT SIZE, 1 2 ) ; TextView t e x t = ( TextView ) f i n d V i e w B y I d (R. i d. t e x t ) ; t e x t. s e t T e x t S i z e ( TypedValue. COMPLEX UNIT DIP, n ) ; t e x t. s e t B a c k g r o u n d C o l o r ( C o l o r. p a r s e C o l o r ( c o l o r ) ) ;

Digression installer InputFilter customisé sur EditText E d i t T e x t e d i t = ( E d i t T e x t ) f i n d V i e w B y I d (R. i d. e d i t ) ; I n p u t F i l t e r hexa = new I n p u t F i l t e r ( ) { @Override p u b l i c CharSequence f i l t e r ( CharSequence source, i n t s t a r t, i n t end, Spanned dest, i n t d s t a r t, i n t dend ) { S t r i n g B u i l d e r b = new S t r i n g B u i l d e r ( ) ; boolean o k f l a g = true ;

Suite f o r ( i n t i = s t a r t ; i < end ; i ++) { i f ( s o u r c e. charat ( i ) >= 0 && s o u r c e. charat ( i ) <= 9 s o u r c e. charat ( i ) >= a && s o u r c e. charat ( i ) <= f s o u r c e. charat ( i ) >= A && s o u r c e. charat ( i ) <= F ){ b. append ( s o u r c e. charat ( i ) ) ; } e l s e o k f l a g = f a l s e ; / non hexa c a r / } } } ; i f ( o k f l a g ) r e t u r n n u l l ; / e n t r y ok a c c e p t / e l s e r e t u r n b ; / e n t r y not OK modify /

Suite installer les filtres e d i t. s e t F i l t e r s (new I n p u t F i l t e r [ ] { new I n p u t F i l t e r. L e n g t h F i l t e r ( 8 ), hexa } ) ;

Fichiers sur la mémoire interne (fichiers privés) Context possède la méthode F i l e g e t F i l e s D i r ( ) qui retourne le chemin vers le repertoire privé de l application (sur la mémoire interne de l appareil). Dans ma tablette cela donne le chemin : /data/data/fr.liafa.zielonka.widgets/files pour l application qui s appelle widgets.

Lire/écrire les fichiers internes Context possède les méthodes : F i l e I n p u t S t r e a m o p e n F i l e I n p u t ( S t r i n g name ) F i l eoutputstream o p e n F i l e O u t p u t ( S t r i n g name, i n t mode ) boolean d e l e t e F i l e ( S t r i n g name ) qui permettent d ouvrir un fichier interne en lecture, écriture ou le supprimer. Le nom de fichier ne peut pas contenir /. Tous les fichiers internes sont créés dans le répertoire retourné par getfilesdir() et il est impossible de créer de sous répertoires. Le paramètre mode peut prendre les valeurs Context.MODE PRIVATE, Context.MODE APPEND, Context.MODE WORLD READABLE et Context.MODE WORLD WRITEABLE. Les deux derniers modes ne doivent pas être utilisés. Le fichier est par défaut écrasé à l ouverture, si on préfère le garder spécifiez MODE_APPEND.

Exemple lecture S t r i n g B u i l d e r l i r e ( boolean e x t e r n a l, S t r i n g f i c h i e r ) { F i l e f i l e = n u l l ; S t r i n g B u i l d e r sb = n u l l ; F i l e I n p u t S t r e a m f i s = n u l l ; t r y { f i s = o p e n F i l e I n p u t ( f i c h i e r ) ; } catch ( F i l e N o t F o u n d E x c e p t i o n e ){ Log. d ( APPLIC, f i l e + f i c h i e r + not found ) ; return n u l l ; } sb = l i r e F i l e I n p u t S t r e a m ( f i s ) ;

Exemple lecture (suite) } t r y { f i s. c l o s e ( ) ; } catch ( IOException e ) { Log. d ( APPLIC, c l o s e + f i c h i e r ) ; } return sb ;

lirefileinputstream S t r i n g B u i l d e r l i r e F i l e I n p u t S t r e a m ( F i l e I n p u t S t r e a m f i s ){ S t r i n g B u i l d e r sb = n u l l ; InputStreamReader r s t r e a m = n u l l ; t r y { r s t r e a m = new InputStreamReader ( f i s ) ; sb = new S t r i n g B u i l d e r ( ) ; i n t nb = 128; } char [ ] tab = new char [ nb ] ; i n t i ; while ( ( i = r s t r e a m. read ( tab, 0, nb ) ) > 0) { sb. append ( tab, 0, i ) ; } } catch ( IOException e ) { Log. d ( APPLIC, read i m p o s s i b l e ) ; return n u l l ; } return sb ;

Écrire dans un fichier interne boolean s a u v e g a r d e ( boolean e x t e r n a l, S t r i n g t e x t, S t r i n g f i c h i e r ){ F i l eoutputstream f o s = n u l l ; t r y { f o s = o p e n F i l e O u t p u t ( f i c h i e r, MODE PRIVATE ) ; } catch ( F i l e N o t F o u n d E x c e p t i o n e ){ Log. d ( APPLIC, f i l e + f i c h i e r+ not found ) ; return f a l s e ; } t r y { OutputStreamWriter ostream = new OutputStreamWriter ( f o s ) ; ostream. w r i t e ( t e x t, 0, t e x t. l e n g t h ( ) ) ; ostream. c l o s e ( ) ; } catch ( IOException e ){ Log. d ( APPLIC, w r i t e i m p o s s i b l e ) ; return f a l s e ; } return true ;

Trouver les fichiers internes (privés) Context possède les méthodes S t r i n g [ ] f i l e L i s t ( ) boolean d e l e t e F i l e ( S t r i n g name ) La première donne les noms de fichiers créés par l application. La deuxième supprime un fichier (le nom sans séparateur).

Fichiers externes Context possède aussi les méthodes F i l e g e t E x t e r n a l F i l e s D i r ( S t r i n g type ) F i l e [ ] g e t E x t e r n a l F i l e s D i r s ( S t r i n g type ) qui retourne le(s) répertoire(s) externes(s) de l application (sur une carte SD). Chaque application possédant le droit WRITE EXTERNAL STORAGE peut écrire dans ces fichiers et avec le droit READ EXTERNAL STORAGE peut le lire.