2ème ING. IDISC & M1 SSII
Développement Mobile - Android
CH1- Introduction Générale
Walid ZEDDINI Directeur IT – Expert Java EE / Mobile
« Enseignant Expert » ISI - TUNIS
ISI - Tunis
SOMMAIRE
Introduction
Le marché Android et les enjeux - positionnement et dernières avancées :
La plateforme Android ##
Anatomie de la plateforme Android et environnement de développement:
L’architecture Android ## ## Les Outils de développement ##
Travaux Pratiques suite à l’introduction générale:
Ateliers ##
ISI - Tunis
SOMMAIRE
Introduction
Le marché Android et les enjeux - positionnement et dernières avancées :
La plateforme Android ##
Anatomie de la plateforme Android et environnement de développement:
L’architecture Android ## ## Les Outils de développement ##
Question /Réponse avec la salle : ## Partage d'expériences ##
ISI - Tunis
INTRODUCTION
3 milliards
1,5 milliard
ISI - Tunis
INTRODUCTION
Qu’est-ce que c’est ?
Souvent présenté comme l’alternative de Google à l’iPhone Système d’exploitation pour terminaux mobiles Basé sur Linux Open Source (licence Apache)
Acteur majeur d'internet 1er moteur de recherche 1er publicité en ligne Solutions d'entreprises: Google Apps, Google Enterprise Appliance... Services gratuits: gmail, apps, photos, vidéos...
Quelle est son histoire ?
ISI - Tunis
INTRODUCTION Historique
2005 : Rachat de la startup Android Inc.
Développement d'applications mobiles :Richard Miner* + Andy Rubin
Objectif du rachat : créer une plateforme mobile
Flexible Accessible à tous les intégrateurs et développeurs Profiter de la convergence web / mobile
Android : un système d'exploitation open source pour Smartphones, PDA, tablettes : systèmes légers
* Richard Miner a quitté Google fin 2008 et Andy Rubin en 2014
l’Alliance dans tout ça ?
Quelle Alliance ?
ISI - Tunis
INTRODUCTION Historique
Open Handset Alliance (OHA)
5 novembre 2007, création de l'OHA (Open Handset Alliance)
Un consortium créé à l'initiative de Google réunissant des
entreprises, opérateurs mobiles, constructeurs et éditeurs logiciels
47 sociétés en 2008, plus de 84 aujourd'hui !
But de l'OHA Favoriser l'innovation sur les appareils mobiles en fournissant une
plate-forme véritablement ouverte et complète
Gratuit
des exemples d’entreprise membres ?
ISI - Tunis
Membres OHA
INTRODUCTION Historique
Ok, Très bien, et la Plateforme Monsieur ?
Quelle Plateforme?
ISI - Tunis
SOMMAIRE
Introduction
Le marché Android et les enjeux - positionnement et dernières avancées :
La plateforme Android ##
Anatomie de la plateforme Android et environnement de développement:
L’architecture Android ## ## Les Outils de développement ##
Question /Réponse avec la salle : ## Partage d'expériences ##
ISI - Tunis
Android Le marché, le matériel, le potentiel
Acteurs système d'exploitation mobile 2009, 2 ans après OHA
Symbian Windows Mobile RIM (BlackBerry) Palm Source (Palm Os -PDA) Apple Linux
Baisse des parts de marché
OS: Palm Source, Windows Décroissance du marché téléphone
Marché du smartphones en hausse
Décroissance du marché « téléphone » Croissance smartphone: +37% en 2009 (GFK) Croissance smartphone: +12% en 2009 (Gartner) Services mobiles: nouveaux usages, multimédia
ISI - Tunis
Android & ses Concurrents
Acteurs système d'exploitation mobile 2011, 4 ans après OHA
Source: Gartner
ISI - Tunis
Android & ses Concurrents
Acteurs système d'exploitation mobile 2012-2017
Source: Strategy Analytics, Android
295 millions mobiles vendus en 2014, 250 millions avec Android.
ISI - Tunis
Android & ses Concurrents
Mais, comment Google a-t-il- fait pour récolter tout cela ?
Source: Strategy Analytics, Android
Près de 9 smartphones sur 10: Android !!!
Bonne Stratégie !
ISI - Tunis
Application Web riche
2
Android Le marché, le matériel, le potentiel
Stratégie Google : • OpenSource
1
Plateforme ouverte
mobile
5
Plus de revenus
Utilisateurs nombreux 4
Développeurs nombreux
3
• •
Android Market, puis Google Play / Google Checkout Publicité mobile
ISI - Tunis
Android Le marché, le matériel, le potentiel
Stratégie Google Points forts
Constructeurs
Linux Open Source
Coût de licence nul
Adaptabilité
Développeurs
Langage Java
Modularité, partage
Kit de développement gratuit
SDK complet
Android Market
Utilisateurs
Fonctionnel, intuitif et évolutif
Multitâches
Applications nouvelles
Nombreuses applications par défaut
ISI - Tunis
Android Le marché, le matériel, le potentiel
Android pour qui ?
Constructeurs de matériels (téléphones, GPS, Netbook ,bornes internet...)
Opérateurs
Éditeurs de solutions logicielles, SSII…
Terminaux visés?
Téléphones portables (HTC, Samsung, Motorola, LG, Condor(Algérie),
Evertek (Tunisie)...)
Netbook /Smartbook (HP Airlife 100, Acer Aspire D250...)
Tablette Multimedia (Samsung Galaxy Tab, Archos, ...)
Automobile (Audi, Volkswagen,Ford...)
Mais aussi : GPS, Réfrigerateur, Machine à laver...
ISI - Tunis
Android
Le
marché, le matériel, le
potentiel
Evolutions des SmartPhones
En 2008 : HTC Dream / G1
En 2009 : Une quinzaine (HTC, LG, Samsung, Motorola...)
20 ans !!!
En 2010 .. 2017 : De très nombreux mobiles, Wear, TV, Watch, Car
Smartphone != Ordinateur
Android tire partie des particularités des smartphones :
interface homme machine adapté (tactile, widget)
divers modes : vibreur, sonnerie, silencieux, alarme
notifications (d'applications, d'emails, de SMS, d'appels en instance)
de boussole, accéléromrtre, GPS
divers capteurs (accélération linéaire, baromrètre)
Publicité
NFC, RFID
téléphonie (GSM) et réseau EDGE, 3G et 4G
En plus de ce qu'on peut avoir sur un ordinateur : navigateur, bibliothèques graphiques 2D, 3D (Open GL), base de données (SQLite), applications de rendu multimedia (audio, video, image) de divers formats, reseau Bluetooth et Wi-Fi, camera
ISI - Tunis
Android Evolution de l’IHM
Android M3 – Nov 2007
Android M5 – Mars 2008
ISI - Tunis
Android Evolution de l’IHM
Android
Novembre 2008
Android
Fevrier 2009
Android
Juin 2010
ISI - Tunis
Android Evolution de l’IHM
Android 2013
Android 2014
Android 2015
Android 2017 – Pixel (Google)
ISI - Tunis
Android Conclusions (provisoire…)
Les facteurs clés de succès :
Le nom Google et les services associés Une plateforme de développement banalisée
L'Open Source, facteur de création d'un communauté productive et d'une adoption par la majorité des acteurs
Tous les docs , tutoriaux, compétences autour d'Android existent sur Internet en accès libre, une opportunité à saisir pour gagner de l’argent....
La Plateforme Monsieur ?
Plus tard, plus tard
ISI - Tunis
SOMMAIRE
Introduction
Le marché Android et les enjeux - positionnement et dernières avancées :
La plateforme Android ##
Anatomie de la plateforme Android et environnement de développement:
L’architecture Android ## ## Les Outils de développement ##
Question /Réponse avec la salle : ## Partage d'expériences ##
Android et Google
A suscité l'engouement des développeurs grâce à deux Android Developer
Challenge en 2008 et 2009 financé par Google
Conçu pour intégrer les applications Google : Gmail, Google Maps, Google
Agenda, YouTube et la géolocalisation
Les differentes versions ont des noms de dessert (qui suivent l'ordre
alphabetique, de A à Z) qui sont sculptés et affichés de Google (Mountain View)
devant le siège social
source : http://fr.wikipedia.org/wiki/Android
Android, les différentes versions
• 1.0 : sortie avant le premier téléphone Android (fin 2007)
• 1.1
• 1.5
:
:
Version incluse dans le premier téléphone , le HTC Dream
Cupcake (Petit Gâteau), sortie en avril 2009
• 1.6
• 2.0
:
Donut (Beignet), sortie en septembre 2009
(2.0.1) : A causé de nombreux bugs, remplacée par la la 2.1
• 2.1
• 2.2
:
:
Eclair, sortie en janvier 2010
FroYo (Frozen Yogourt : Yaourt glace), sortie en mai 2010
• 2.3
:
Gingerbread (Pain d'épice), sortie le 6 decembre 2010
• 3.0 : Honeycomb10 (Rayon de miel), pour Tablette , 26 janvier 2011, version unifiée :Smartphone, Tablette • 4.0 : Ice Cream Sandwich (Sandwich à la crème glacée), version unifiée : Smartphone, Tablette et GoogleTV
Android, les différentes versions
• 4.1 : API 16 (Jelly Bean) sortie le 9 juillet 2012
• 4.2.2 : API 17 (Jelly Bean) sortie le 11 fevrier 2013
• 4.3 : API 18 (Jelly Bean) sortie le 24 juillet 2013
• 4.4 : API 19 (KitKat) sortie le 31 octobre 2013
• 5.0 : API 21 (Lollipop), ART (Delvik) , Material Desig, sortie le 3 novembre 2014
• 5.1 -5.1.1: API 22 (Lollipop) sortie le 19 Février 2015
• 6.0 -6.0.1: API 23 (Marshmallow) sortie Fin mai 2015
• 7.0 -7.1.2: API 24 - API 25 (Nougat) sortie 21 Septembre 2016
• 8.0 : API 26 (Oreo) - 21 Aout 2017
• 8.1 : API 27 (Oreo) - 5 Décembre 2017 (Go Edition: variante d'Android dédiée aux mobiles d'entrée de gamme)
• 9.0 : API 28 (Pie) – Rapidité, économie en énergie, Applications IA, 9 Aout 2018
http://fr.wikipedia.org/wiki/Historique_des_versions_d'Android
https://www.cnetfrance.fr/news/android-retour-sur-toutes-les-versions-de-l-os-google-39872199.htm
Android, les différentes versions
http://developer.android.com/about/dashboards/index.html
Google Play, l’ex Android Market
Google Play, est une boutique en ligne créée par Google (le 6 mars 2012) par
fusion des services Android Market et d'autres services Google (location de films, achat de musique, etc.). Elle permet de télécharger et d'installer de nouvelles applications ("apps") dans le smartphone.
Android market est "né" le 22 octobre 2008
"Au 1 janvier 2013, Google Play est fort de 800 000 applications devant " iOS" & WinPhone
voir historique à http://fr.wikipedia.org/wiki/Android_Market
Les developpeurs d'applications payantes reçoivent 70 % du prix du logiciel, 30 % allant à Google (redistribués aux développeurs via Google Checkout) Chaque nouveau développeur paie $25 comme frais de dossier (une seule fois)
ISI - Tunis
Anatomie d’Android
Android: 2 parties
Système d'exploitation (noyeau Linux) Environnement d'exécution Dalvik (Java) (Environnement d'exécution ART, Depuis 2015 avec Lollipop SDK 5)
Kit de développement Java disponible depuis 2007
Concours Android Developer Challenge (Google) – Lancé 2008 Aout 2017 SDK 8.0
OS et SDK sont disponibles en Open Source
Développer une application ne requiert pas l'obtention de l'OS et réciproquement
Enfin, la Plateforme.
Ce n’est pas tout !
Le SDK Android
l'Android SDK (Software Development Kit) amène des outils :
un environnement de développement une machine virtuelle Java adaptée : la Dalvik virtual machine (ART 2014) un environnement debugueur DDMS (Dalvik Debug Monitor Service) utilisant
adb (Android Debug Bridge)
un environnement de construction d'application Android aapt
(Android Asset Packaging Tool)
des emulateurs de téléphones ou de tablettes AVD (Android Virtual Device)
et une énorme API (voir à
http://developer.android.com/reference/packages.html)
ISI - Tunis
Architecture en « pile Logicielle »
Anatomie d’Android
ISI - Tunis
OS Android: Les 2 couches inférieures:
Anatomie d’Android
Linux Pas de système natif
Linux kernel 2.6.24 ARM de
fenêtrage
Pas de support Glibc Optimisation mémoire,
processus et alimentation
Gestion utilisateurs
Dalvik
VM Android Optimisée embarqué Multi-instance Optimisation mémoire, sécurité Optimisation bytecode Fichier .dex JIT
ISI - Tunis
de Dalvik à Android RunTime (2014 SDK 5.0)
VM Android
Etait la machine virtuelle Java pour les applications Android Conçu pour exécuter du code Java pour des systèmes ayant des contraintes de place
mémoire et rapidite d'execution
Execute du code .dex (Dalvik executable) = des .class adaptés à
l'environnement Android
Ecrit par Dan Bornstein d'où le nom est le village islandais de ses ancêtres Le code de la DVM est open source JIT : compilateur Just-In-Time
Android RunTime Environnement d'exécution plus performant AOT : compilateur Ahead-Of-Time Gains en performance et en autonomie des batteries (+20 à 30 %)
Comment plus performant ?
ISI - Tunis
VM Android
ART est un moteur d'exécution multi-plate-forme qui prend en charge les architectures x86, ARM, MIPS et les environnements 32 bits et 64 bits.
Contrairement à Dalvik, qui utilise la compilation juste à temps (JIT), ART
compile les applications lors de l'installation (compilation anticipée) ou AOT (Ahead of Time), elles sont ensuite exécutées exclusivement à partir de la version compilée.
Cette technique élimine la charge de traitement associée à la compilation JIT,
améliorant les performances du système ainsi que la consommation d'énergie
La machine virtuelle Dalvik a été officiellement remplacée par ART qui est
maintenant activé par défaut.
ISI - Tunis
Anatomie d’Android
La couche "Libraries" (bibliothèques) = couche logicielle basse pour utiliser:
les formats multimedia : images, audio et video enregistrement comme rendu les dessins 2D et 3D, bitmap et vectoriel une base de donnees SQL (SQLite)
L'environnement d'éxecution (Android Runtime). Toute application est exécutée dans son propre processus, dans sa propre Dalvik virtual machine ou ART Le noyau Linux sur lequel la Dalvik virtual machine s'appuie pour gérer le
multithreading, la mémoire. Le novau Linux apporte les services de securite, la gestion des processus, etc.
ISI - Tunis
Anatomie d’Android
La couche "Applications" : Android est utilisé dans un ensemble contenant
déjà des applications natives comme, un client de mail, des programmes pour envoyer des SMS, d'agenda, de navigateur web, de contacts personnels
Base de l'API
Point d'entrée pour les applications Accès à toutes les ressources inférieures via librairie Accès possible aux ressources C via JNI (bypass de cette
Publicité
couche)
ISI - Tunis
Anatomie d’Android
La couche "Application Framework" : permet au programmeur de construire de
nouvelles applications. Cette couche fournit la gestion :
des Views (= IHM) des ContentProviders = l'accessibillité aux données des autres applications
(ex : les contacts) et donc les partages de données
des ressources = les fichiers non codes comme les images, les écrans
(Resource Manager)
des Notifications (affichage d'alerte dans la barre de titre) des Activitys = l'enchaînement des écrans
ISI - Tunis
Anatomie d’Android Développement
Environnement
Windows XP / Vista / 7 / 8.1/ 10 Mac OS Linux
JDK (J2SE)
1.5 1.6
1.7 / 1.8 / 1.9 / 1.10 / 1.11
SDK Android
SDK Min : 2.3 / 3.0 SDK Target : 4.2 / 4.4/ 5.1/ 6.0 /7.0 /8.0 /8.1 / 9.0
IDE :
Eclipse + plugin ADT Android Studio (2015)
Optionnel: Outil dev C: Intégration code C/C++ en tant que librairie (JNI)
La pile des outils de développement pour Android
AVD Manager
SDK Android
ADT Plugin
Eclipse
JDKJava(SE)
Depuis 2015 Android Studio
A la place d’Eclipse ADT
Android Studio : http://developer.android.com/sdk/index.html
Fin de l’installation l'environnement
Android Studio - Installé
SDK - Installée
JDK - Installée
Et c'est tout : on peut commencer à faire du développement pour Android
Le site officiel d'Android : http://developer.android.com/
Il y’en a tout tout tout !
Pour installer l'environnement de développement Android:
http://developer.android.com/sdk
Résumé de la première partie
Le terme Android dénote à la fois,
une societé initiatrice pour le développement d'applications pour smartphones
rachetée par Google,
un environnement de développement, un environnement d'exécution.
L'environnement d'execution est une pile logicielle avec, à la base un système d'exploitation Linux
Pour développer des applications Android, utiliser l’outils de développement Android Studio
Anatomie d’Android Concept de base
Le code est écrit en Java (eh oui)
L'Android données, Android :
SDK compile l'ensemble du développement (code Java, fichier de ressources, fichier XML) dans un paquetage un .apk
Toute une application tient dans un .apk et un .apk = une
application
Les composants fondamentaux d'une application Android sont :
Activity, Service, ContentProvider, BroadcastReceiver
Certains de ces composants communiquent entre eux à l'aide
d'Intent
ISI - Tunis
Anatomie d’Android Développement
Une application est une succession d'écrans
Elle inclut un ensemble de descripteurs pour chaque écran
écran d'une même application ou
Un écran peut ouvrir un autre d'une autre application
5 composantes majeures
Intent Activity Broadcast Receiver Content Provider Service
L'ensemble de ces composantes
est décrit dans le fichier
AndroidManifest.xml
Les applications ont pour extension APK (Android Package)
ISI - Tunis
Anatomie d’Android Développement
Activity
Une classe par Activity Généralement le point d'entrée d'une application Généralement une interface graphique, un écran Cycle de vie
Intent
Type d'action possible déclaré auprès du système
Indique le besoin ou le service offert
Content Provider
Accès aux données partagées Données internes ou externes à l'application Encapsulation du schéma de la base Pas de requête
-URI -Services de manipulation des données fournis par le package
ISI - Tunis
Anatomie d’Android Développement
Services
Composants sans interface graphique Activité de longue durée Démarrer par context.startService: interne à l'application Démarrer par context.bindService: externe à l'application
Broadcast Receiver
Réagit à des évènements externes Logiciel: Alarme, notifications... - - Matériel: Activation puce GPS, exting
Réveiller une application, afficher un message, lancer une activity
Classe R.java
ISI - Tunis
Anatomie d’Android Développement
Construction d'une application
Code source
Byte Code Java
Byte code optimisé Génération fichier.dex
Construction du package destiné à être installé
ISI - Tunis
Anatomie d’Android Hello Android
Création d'un nouveau projet
Ecoutez, passez aux Ateliers, il y a de tout !
Juste Hello Word SVP !
ISI - Tunis
Anatomie d’Android Hello Android
Arborescence Project
ISI - Tunis
Les Activity et leurs interactions Activity
Une classe étendant de Activity
Point d'entrée d'une application
Généralement un écran d'une application (plein écran ou non)
Comportement défini dans le fichier AndroidManifest.xml
Une Activity peut
Être sans interface Être une fenêtre flottante Retourner des valeurs Lancer d'autres Activity
Possède un cycle de vie
ISI - Tunis
Les Activity et leurs interactions Activity
Cycle de vie d'une Activity
ISI - Tunis
Les Activity et leurs interactions Activity
Différentes Activity disponibles - android.app.*
ActivityGroup ListActivity AliasActivity ExpandableListActivity PreferenceActivity LauncherActivity TabActivity
Une Activity est capable de lancer une autre Activity
– que
nous nommerons SubActivity Interne à l'application Externe à application Récupérer le résultat d'une SubActivity Notion importante d'Intent
ISI - Tunis
Les Activity et leurs interactions Intent
Intent
Définir une action à effectuer Créer des liens entre application Décrit par une action (VIEW, EDIT, MAIN,...) URI pour renseigner les données à traiter
IntentFilter
Décrit les capacités d'une application Attaché à une Activity Écoute les demandes d'Intent (handler) Enregistré au niveau système
Appelant (intent) Activity, Services...
Recherche de l'IntentFilter le mieux adapté par l'IntentResolver
Activity est lancée
ISI - Tunis
Les Activity et leurs interactions Activity
Lancer une autre Activity
Définition du type d'Intent Définition du chemin de l'Activity
startActivity
startActivity(new Intent(this, ScoreActivity.class));
StartActivityForResult Lancer l'activity Récupérer le résultat
ISI - Tunis
Les Activity et leurs interactions Descripteur d’application
1 fichier de description de l'application: AndroidManifest.xml
Descripteur de l'application
Renseignements sur l'application (nom, version de code, SDK
supporté...)
Définit le comportement des Activity et leurs actions Déclare auprès du système les Intent accessibles Définit les services, broascat receiver et content provider
Déclaration des ressources nécessaires (applications, Internet,
matériels, données...)
L'utilisateur est toujours prévenu à l'installation des ressources requises pour le bon fonctionnement de l'application. Il peut accepter ou refuser.
ISI - Tunis
Interface graphique IHM : Présentation
(IHM)
Différents de J2ME, AWT ou Swing
Deux méthodes de création XML (recommandé) Code Java
Avantages XML
Lisibilité du code Java Lisibilité de la construction de l'IHM
Allègement du code Java Rapidité de développement (Similaire à un page HTML) Moins de risque d'erreur
Large éventail de composants déjà disponibles
Personnalisation possible de chaque élément
Publicité
Système de « thèmes » disponible
ISI - Tunis
Interface graphique (IHM) IHM : les layouts, les vues
Chaque composant correspond à un Layout
Présent dans /res/layout Représente un écran Représente un composant spécifique d'un écran
Chaque composant
Dispose d'un identifiant unique (de préférence) Peut être accédé, ajouté, modifié et supprimé depuis le code Java
android:id=@+id/monidentifiant pour votre composant android:id=@android:id/empty pour référencer un composant spécifique d'Android
Identification par le fichier R.java (généré par aapt)
Compiler sous forme de vue embarquée dans le fichier dex
ISI - Tunis
Interface graphique (IHM) IHM : les layouts, les vues
Ecrire son fichier XML
Contient obligatoire un élément racine (Root) Peut contenir autant de layout ou vue que désiré Sauvegardé sous /res/layout/monlayout.xml Ne pas contenir de majuscule ou de chiffre
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello"/>
</LinearLayout>
ISI - Tunis
Interface graphique (IHM) IHM : les layouts, les vues
Charger le layout désiré
Référencés sur le nom de fichier (sans extension) dans R.java R.layout.monlayout
setContentView(layout)
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState); setContentView(R.layout.main);
}
Un layout peut être chargé au sein d'un autre composant en
utilisant l'objet LayoutInflater
Chaque composant dispose d'un certain nombre de paramètres
android:layout_width et android:layout_height (fill_parent, wrap_content...) android:id, android:text, android:background...
Chaque composant dispose de ses arguments propres:
android:orientation pour LinearLayout (vertical, horizontal)
ISI - Tunis
Interface graphique (IHM) IHM : string et multilinguisme
Les
chaines de caractères et l'IHM
Fichier XML /res/values Par défaut: string.xml <string name=''cle''>Valeur à afficher</string>
<?xml version="1.0" encoding="utf-8"?> <resources>
<string name="hello">Hello World, HelloActivity!</string> <string name="app_name">Mon Hello Android</string>
</resources>
Multilingues
Basée sur la locale du système /res/values-fr, /res/values-en contenant un fichier string.xml Utiliser les mêmes clés pour afficher la valeur dans la langue
correspondante
ISI - Tunis
Interface graphique (IHM) IHM : Les menus
Sous menu
Menu contextuel
ISI - Tunis
Interface graphique (IHM) IHM : évènements
Gérés comme en Java / AWT / Swing / J2ME Mise en place de Listener (écouteurs) Peuvent être appliqués sur chaque composant View Évènements supplémentaires en fonction du type de la Processus
vue
Récupérer l'objet vue concerné Ajout du listener
Implémentation des actions à réaliser par le listener
Button monBoutton = (Button)findViewById(R.id.monBouton); b.setOnClickListener(evtClickSurMonBoutton); … … OnClickListener evtClickSurMonBoutton = new OnClickListener(){
public void onClick(View v){
// Implémentation
}
};
ISI - Tunis
Interface graphique (IHM) IHM : Boite de dialogue
Une vue affichée sur la couche
supérieure du contenu courant
Composition
Titre, Texte Icône Boutons Animation, personnalisable
Bloquante
AlertDialog.Builder
Personnalisable à volonté
ISI - Tunis
Interface graphique (IHM)
IHM : Boite
de dialogue
Des listes dans les boites de dialogues
Des listes et boutons radios
Barre de progression (fin connue ou indéterminée)
ISI - Tunis
Données persistantes
3 types de données persistantes:
Préférences utilisateurs Base de données (Sqlite3) Content Provider
Gestion de vos données dans des fichiers
ISI - Tunis
Données persistantes Les préférences utilisateurs
Composants fournis
IHM Données
Simple
Ensemble de clés (String)/valeurs(primitive)
Propre à l'Activity ou à l'application entière
Déclarations dans AndroidManifest
Données sauvegardées dans /data/data/monpackage/shared_prefs/monpackage.xml
ISI - Tunis
Données persistantes Bases de données
SQLITE
Projet Open Source Base de données transactionnelles Pas de partie serveur Toutes les tables sont contenues dans un seul Crossplatform Données typées Langage SQL Clé primaire Non disponible: FOREIGN_KEY, RIGHT/LEFT_OUTER_JOIN, certaines options ALTER_TABLE
fichier
SQLITE3
Librairie de manipulation Accessible par adb shell
Type de données supportées: NULL, INTEGER, REAL, TEXT, BLOB
ISI - Tunis
Données persistantes Bases de données
SQLITE & Android
Aucune base par défaut: tout doit être construit Manipulation SQLiteDatabase SQLiteOpenHelper
-
-
onCreate onUpdate
Le fichier est sauvegardé par défaut dans /data/data/monpackage/databases
L'enregistrement de fichier de base de données sur une carte mémoire ne pourra être réalisé par SQLiteOpenHelper, recours à l'objet SQLiteDatabase
ISI - Tunis
Données persistantes Bases de données
Manipulation des données
execSQL: exécution de commande SQL passée en paramètre sous forme de chaine de caractères (dans la classe de l'adapter)
db.execSQL("insert into " + DATABASE_TABLE_USER + " (" + COL_TAB_HELLO_USER_NOM + ") values('" + name + "');");
Insert(), delete() et update() de SQLiteOpenHelper
-
-
-
Nom de la table concernée ContentValues().put(nom de colonne, valuer)
ContentValues cv = new ContentValues(); cv.put(COL_TAB_HELLO_USER_NOM, name); db.insert(DATABASE_TABLE_USER, COL_TAB_HELLO_USER_ID, cv);
Permet de retourner des valeurs (ex.: identifiant d'un nouveau élément ajout)
ISI - Tunis
Données persistantes Bases de données
Query
public Cursor query (String table,// nom de la table String[] Columns, // nom des colonnes a retourner ou null pour toute String Selection, // clause where, sans le mot 'where' ex.: nom=? String[] SelectionArgs, // tableau ordonné des valeurs
// utilisées dans la clause where
String GroupBy, // argument groupBy, ex: nom, prenom – null sinon String Having, // argument clause having – null sinon String OrderBy) // argument d'ordonnancement ex: nom - null sinon
public void getInfo(String nomRecherche){
String[] columns=new String[]{"nom", "prenom"}; String[] params={nomRecherche}; Cursor result=db.query(this.DATABASE_TABLE_USER,
columns, "nom=?",params, null, null, null);
… }
ISI - Tunis
Données persistantes Content provider
Toutes les URI commençant par URI Encapsulation de la structure des données Base de données, fichiers plats, accès distant A partir d'une URI
Create Read Update Delete
Utilisation de ContentProvider existant – d'autres applications Créer, utiliser et partager vos données Définition d'une URI
PREFIXE://IDENTIFIANT DU TYPE DE DONNEES/DEFINITION DE LA DONNEES/ENREGISTREMENT
content://contact/people/123
content://com.mycompany.hello/user/53
ISI - Tunis
Données persistantes Content provider
Réaliser une requête
managedQuery() depuis un objet Activity
-
Publicité
-
-
-
-
URI Un tableau des propriétés du ContentProvider à obtenir dans le résultat (nommé projection) Les contraintes (clause Where) Ensemble des paramètres permettant de compléter les contraintes (? dans la clause where) Clause d'ordonnancement
Retourne un Cursor
Propriété d'un ContentProvider = Colonnes d'une base de données
private static final String[] PROJECTION = new String[] { Provider.Constants._ID, Provider.Constants.TITLE, Provider.Constants.VALUE};
.... constantsCursor=managedQuery(Provider.Constants.CONTENT_URI, PROJECTION, null, null, null)
ISI - Tunis
Données persistantes Content provider
Insérer des enregistrements
insert() -
Uri + contentValues Retourne l'identifiant de l'élément inséré
-
bulkInsert()
-
-
Tableau d'Uri et tableau de ContentValues pour ajouter plusieurs enregistrements en une seule fois Retourne le nombre d'éléments insérés
Suppression d'un enregistrement
Delete
-
-
-
Uri, clause where, arguments complétant la clause where Les informations dépendantes à la table visée seront également supprimées (cascading) Retourne le nombre d'éléments supprimés
Mise à jour Update -
Uri, valeurs à insérer, clause where, arguments complétant la clause Retourne le nombre d'éléments mis à jour
-
rewhe
ISI - Tunis
Données persistantes IHM, Cursor et Adapter
Composant dédié à l'affichage de liste
Gestion du Cursor ou de listes Mise à jour automatique lors d'un ajout, modification, Composants graphiques déjà disponibles Personnalisation de l'affichage possible Adapter: mapping entre la vue et les données
suppression
Processus
Utilisation d'un composant gérant un adapter (spinner, Récupération d'un Cursor Création de l'adapter Affichage
listview...)
En cas de personnalisation de l'affichage, nécessité de créer son propre Adapter
ISI - Tunis
Données persistantes IHM, Cursor et Adapter
Exemple simple: ListActivity
Une Activity devient une ListActivity Obligation de présence d'un objet ListView dans SimpleAdapterCursor Application de l'adapter sur la vue courante
Id spécifique: android:id="@android:id/list"
le layout
Cursor c = managedQuery(uri, PROJECTION,
null, null, null);
startManagingCursor(c); ListAdapter adapter = new SimpleCursorAdapter(
this, android.R.layout.two_line_list_item, c, PROJECTION, new int[]{android.R.id.empty,
android.R.id.text1, android.R.id.text2}
setListAdapter(adapter);
);
ISI - Tunis
Services et Multithreading
Services
Process actif tant que la mémoire n'est pas limitée Attention à la surcharge! Implémentation simple Étend de Services
- - OnCreate - OnStart - OnDestroy -
Déclarations dans l'Android Manifest
ISI - Tunis
Services et Multithreading Services
AIDL
Android Interface Description Language Partage du service avec d'autres applications
(Inter Process
Communication)
Développement d'interface N'acceptes que
-
-
-
-
-
Des primitives Des String et CharSequence List ou Map Autre AIDL Autres classes Java implémentant Parcelable void retrieveInfo(in String nom, out String Info) in / out: définit le sens de l'information in: paramètre d'entrée est utilisée pour lecture uniquement par le service out: paramètre pouvant être modifié par le service et propagé
-
-
-
ISI - Tunis
Services et Multithreading Alarmes, notifications
Notifications
Toutes les alertes émanant du système ou d'autres applications Affichage d'une icône et/ou texte dans la barre de notifications Coloration de la led du téléphone
NotificationManager
Hardware (son, led, vibreur)
Icons / Texte
Obtenir une instance du NotificationManager Création de l'objet Notification (icon, message...)
Création d'un PendingIntent pour la finalité de la notification
(ouverture d'une activity)
Attribuer le pendingIntent à la notification
Envoyer la notification
ISI - Tunis
Services et Multithreading Accès distants
Librairies Apache HttpComponents HTTP Ajouter des librairies supplémentaires pour
protocoles: XMPP, SMTP...
HTTP POST/GET HttpClient Renseigner les informations sur la requête
execute()
Requête GET
réaliser d'autres
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(url); try{
HttpResponse response = httpclient.execute(httpget);
} catch (ClientProtocolException cpe) {
Log.e(TAG, "ClientProtocolException retrieveInfo:" + cpe);
}
ISI - Tunis
Services et Multithreading Accès distants
Requête POST
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httpost = new HttpPost(http://www.monserveur.com); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("cle1", valeur1)); nvps.add(new BasicNameValuePair("cle2", valeur2)); httpost.setEntity(new UrlEncodedFormEntity(nvps, null)); HttpResponse response = httpclient.execute(httpost);
Envoi de fichier par POST
Utilisation de HttpURLConnection Définition des paramètres de la connexion (entrée, sortie,
boundary,
méthodes...)
Ouverture d'un DataOutputStream sur la connexion Pour chaque élément à envoyer: - Ouverture du fichier en lecture -
Écriture du type de données et du flux dans le DataOutputStream
ISI - Tunis
Services et Multithreading Accès distants
Réponse d'une requête
HttpResponse Sur retour de la commande execute Création d'un HttpEntity par httpResponse.getEntity() Lecture d'un InputStream sur httpEntity.getContent()
ISI - Tunis
Services et Multithreading Utilité des Threads
Blocage de l'application lors des accès distants (Wake Lock)
Solution (recommandation!)
Utilisation de Thread pour les traitements bloquant: accès distant, calculs...
Les
threads n'ont pas accès aux IHM
Système de message de communication entre un Thread et un Handler Classe implémentant l'interface Runnable Constructeur prenant en paramètre l'Activity qui appellera le Thread Surcharge de la méthode run() dans laquelle Les traitements sont exécutés Les messages sont envoyés au Handler Création d'un objet Handler Gestion des codes reçus Mise à jour de l'IHM de l'Activity appelante
Une Thread ne peut être tuée, le système s'en charge
Gestion d'un état permettant ou non d'appeler ou pas le contenu de run()
ISI - Tunis
Autres composants
Gestion des appels entrants et sortants Connexion GSM/Bluetooth/Wifi/GPS Envoi/réception SMS SearchManager Géolocalisation Localisation Map/MapView Accéléromètre
Multimedia Son Caméra 2D/3D
ISI - Tunis
Livres Busy coder's guide to Android Development – Mark. L. Murphy – Edition CommonsWare – 2 livres tutoriaux et Advanced Development
http://www.commonsware.com
Hello Android, Introducing Google's mobile development Platform – Ed Burnette – 220 pages
http://www.pragprog.com
Ressources en lignes: site web
http://developer.android.com (documentations officielle) http://sites.google.com/site/io/ (recherche sur Mobile, présentations vidéos) http://www.anddev.org (tutoriaux, forums) http://www.androidcommunity.com (actualités) http://www.devx.com/wireless (actualités, tutoriaux) http://www.helloandroid.com (actualités)
Ressources en lignes: forums
http://groups.google.fr/group/android-developers http://groups.google.fr/group/android-beginners
Ressources francophones: actualités et développement
http://www.frandroid.com (actualités, forums) http://www.pointgphone.com (actualités, forums)
ISI - Tunis
Développement Android - Google Maps
Intégration de Google Maps V2
Vues plan / satellite Gestion des données Zoom & défilement Surcharge de la carte
Développement Android - Zxing
ISI - Tunis
Conclusions du Cha