Cours Android
Cours Android
Cours Android
Programmation Android
TMC
P-F. Bonnefoi
Version du 4 avril 2011
Table des matires 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Open Handset Alliance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Android : matriel et logiciel combins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les applications natives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ce quAndroid nest pas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Le terminal Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notre terminal Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les avantages de la plateforme Android et de ses APIs . . . . . . . . . . . . . . . . . . . La pile logicielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modle de scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Une application Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cycle de vie dune activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installation de lenvironnement de dveloppement . . . . . . . . . . . . . . . . . . . . . . . Le contenu du SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crer un terminal Android virtuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Connexion lmulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Crer une application Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lactivity Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Si vous avez une erreur lors de la compilation. . . . . . . . . . . . . . . . . . . . . . . . . . . Linterface de lActivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6 7 8 9 10 11 12 13 14 18 21 26 27 28 29 30 31 32
TMC
TMC
20 Le chier AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Le chier AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Application Android : dirents chiers et rpertoires . . . . . . . . . . . . . . . . . . . . 23 Accs aux ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Les prfrences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Finaliser lapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Journalisation des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Intent(ion) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Indiquer les intent(ions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Linterface BroadcastReceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Linterface graphique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Utilisation dXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Utilisation dEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Le chier XML correspondant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Accs linterface depuis le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Dautres Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Un interfaage rapide : les dialogues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Notications Toast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Gestion du Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Bluetooth : mise en activit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 34 37 38 39 40 42 43 45 46 47 48 49 50 51 52 53 54 55 56 57
41 42 43 44 45
Surveiller la dcouverte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utiliser la bibliothque de simulation Bluetooth . . . . . . . . . . . . . . . . . . . . . . . . . Utilisation des fonctions de hashage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilisation de cls RSA nouvellement cres . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilisation de cls RSA dj cres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60 61 62 63 64
TMC
A commitment to openness, a shared vision for the future, and concrete plans to make the vision a reality. To accelerate innovation in mobile and oer consumers a richer, less expensive, and better mobile experience. Together we have developed Android TM, the rst complete, open, and free mobile platform. http://www.openhandsetalliance.com/oha_faq.html
TMC
TMC
un document de rfrence exprime les contraintes matrielles ncessaires au support de la pile logicielle ; un noyau Linux qui fournie les interfaces de bas-niveau vers le matriel, la gestion de la mmoire, la gestion des processus, optimis pour les appareils mobiles ; des bibliothques opensource pour le dveloppement dapplication incluant SQLite, WebKit, OpenGL et un gestionnaire multimdia ; un logiciel de dmarrage, runtime : de petite taille, ecace pour une plateforme mobile pour excuter et hberger les applications Android ; pour dmarrer et grer la machine virtuelle Dalvik ; pour grer et mettre disposition les bibliothque des fonctionnalits de base ; un framework qui expose tous les services la couche applicative sans privilgier une application suivant son origine (diteur tiers ou non) : gestionnaire de fentre, fournisseur de contenu, gestionnaire de position gographique, tlphonie et service de communication p2p ; un framework dinterface utilisateur utilis pour hberger et lancer les applis ; des applications pr-installes ; un kit de dveloppement logiciel pour crer des applications : outils, plug-ins et documentation.
Il existe un certain nombre dapplications disponibles dans Android : un client de messagerie compatible Gmail mais aussi avec dautres messageries ; une application de gestion des SMS ; un gestionnaire de contacts et dagenda, un PIM Personal Information Management, intgr avec les services onlines de Google ; une application de gestion de Google Maps incluant StreetView, la navigation guide par GPS, les vues satellites et lobtention des conditions de trac ; un navigateur web bas sur WebKit ; un client de messagerie instantane ; un lecteur multimdia et un acheur de photo ; un client lAndroid Marketplace pour tlcharger des applications dditeur tiers ; un client pour la boutique dachat de musique Amazon . Ces applications sont programmes en Java avec le SDK et sexcutent sur la Dalvik. Mais Les donnes utilises par toutes ces applications sont rendues disponibles aux applications tierces. Les applications tierces peuvent recevoir et grer des vnements comme la rception dappel tlphonique et celle de SMS.
TMC
une implmentation de Java ME, Micro Edition : une application android est crite en Java, mais ne sexcutent pas dans une machine virtuelle Java ME. Les classes Java compiles et les excutables ne peuvent tourner directement sous android ; une partie du Linux Phone Standards Forum (LiPS) ou du Open Mobile Alliance (OMA) : android tourne sur un noyau Linux opensource, mais lapproche dAndroid est plus global ; juste une couche applicative : Android recouvre la pile logiciel complte :systme dexploitation, bibliothques et les applications galement ; un tlphone mobile : Android inclus un document de rfrence pour la conception de tlphone, mais il nexiste pas un seul tlphone Android mais au contraire de nombreux tlphones fabriqus par dirents constructeurs ; la rponse de Google liPhone : Android est issu dun consortium et non dun seul constructeur.
TMC
5 Le terminal Android
Cest un smartphone, caractris par : un processeur autour de 1Ghz, comme le Snapdragon de Qualcomm sur architecture ARM ; une batterie de capacit limite, 1 ou 2 journes dutilisation ; un cran de rsolution variable suivant les modles limite en dimension, QVGA : 320x240, WVGA : 800x480, etc. une mmoire intgre importante : 512Mo de RAM, 512Mo de ash ; un espace de stockage renouvelable et extensible (SDCard) ; cran tactile, capacitif multi-touch , ou encore rsistif ; capacits multimdia 2D, 3D, vido et son : dirents CODECs : MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF, direntes APIs : OpenGL, FreeType, SGL ; laccs Internet en mobilit : accs au WiFi, au GSM, au EDGE, la 3G pour la tlphonie et lchange de donnes ; un environnement de dveloppement riche, bas sur le langage Java permettant de crer facilement des applications mobiles connectes !
TMC
10
TMC
? ?
11
pas de license obtenir, pas de dpense pour la distribution et le dveloppement Cool pour lUniversit ! dvelopper des applications location-based en utilisant le GPS ; utiliser des cartes gographiques avec Google Maps ; recevoir et mettre des SMS, envoyer et recevoir des donnes sur le rseau mobile ; enregistrer et lire image, son et vido ; utiliser compas, acclromtre, gyroscope ; des IPC, inter process communication, avec les Notications et Intents pour une relation event-driven avec lutilisateur et lchange de messages entre applis ; desoutils de stockage de donnes partags (SQLite en version Sandbox) ; Content Provider pour partager laccs ses donnes ; un navigateur que lon peut inclure bas sur WebKit ; une acclration matrielle pour la 2D et la 3D ; des services et des applications qui peuvent tourner en tche de fond : qui peuvent ragir au cours dune action, votre position dans la ville, lheure quil est, suivant lidentit de lappelant. . . une plateforme de dveloppement qui favorise la rutilisation de composants logiciels et le remplacement des applications fournies.
TMC
8 La pile logicielle
Application Layer Native Apps
(Contacts, Maps, Browser, etc.)
12
Developer Apps
Application Framework Location-Based Services Telephony Content Providers P2P/IM Window Manager Notifications Activity Manager Views Package Manager Resource Manager Android Runtime Media SSL & WebKit Android Libraries Dalvik Virtual Machine
Libraries Graphics
(OpenGL, SGL, FreeType)
SQLite
Surface Manager
Power Management
Process Management
Memory Management
TMC
Figure 1-1 K Linux Kernel Core services (including hardware drivers, process and memory management,
9 Modle de scurit
89 13
FIGURE 5.6
TMC
14
Une application Android est constitue de composants faiblement coupls. Ces composants sont dcrits dans un mme document : le manifest , un chier au format XML AndroidManifest.xml qui dcrit : chaque composant : Activities, Services, Content Providers, Broadcast Receivers ; les interactions de ces composants : Intent Filters et Notications ; les accs ncessaires au matriel et logiciel (bibliothques) :Permissions ; Les composants pour dnir une application : les Activits ou activity : correspondent des applications sur un ordinateur de bureau. elles sont dmarres la demande de lutilisateur ou du systme ; elles tournent aussi longtemps quelles sont utiles : le systme peut tuer une activit pour rcuprer de la mmoire ; elles peuvent interagir avec lutilisateur, demander des donnes ou des services dautres activits ou des services , au travers de requtes et d intentions , intents ; en gnral, une activit = un cran dinterface, appel View.
TMC
15
les Services : similaires aux dmons sous Unix et aux services sous Windows : du code tournant en tche de fond. ils travaillent mme lorsque lorsque lactivit de lapplication nest plus active ou visible (par exemple, un lecteur MP3 qui peut jouer de la musique mme si linterface de contrle ne tourne plus) ; ils peuvent transmettre des notications. les notications : cest un moyen de signaler lutilisateur sans interrompre lactivit courante, ni prendre le focus. la meilleur mthode pour attirer lattention de lutilisateur depuis un service ou un rcepteur de diusion ; exemple : lutilisateur reoit un SMS ou un appel et il est alert par des voyants qui clignotent, lcoute dun son, lachage du message ou une icone.
TMC
16
les fournisseurs de contenu ou Content providers : ils ont t dnis pour partager des donnes avec dautres applications. ils utilisent une interface standardise sous la forme dURI, Uniform Resource Identier, pour rpondre des requtes en provenance dautres applications. Ces applications nont mme pas besoin de connaitre le fournisseur de contenu qui leur rpond. exemple : content://contacts/people permet de dnir une requte pour laccs la liste des contacts de lutilisateur ; le systme dexploitation recherche si une application sest enregistre comme fournisseur de contenu pour cette URI ; sil trouve une application, il la dmarre si elle ne sexcute pas dj, et lui transmet la requte ; sil trouve plus dune application, il demande lutilisateur laquelle il veut utiliser.
TMC
17
les intents ou notications : ils dnissent un modle par passage de message entre les applications. Ces messages peuvent tre diuss, broadcast, tout le systme ou bien tre envoys une activit ou un service particulier (le systme dcide des cibles) ; un message a pour but de dclencher une action. les rcepteurs de diusion , ou broadcast receivers. Ils senregistrent dans le systme et reoivent les messages diuss qui correspondent un ltre prdni. ils peuvent dclencher une application en rponse la rception dun message ; ils permettent dutiliser un modle pilot par les vnements , event-driven. les widgets : des composants visuels qui peuvent tre ajouts lcran de dmarrage, home screen. Il correspondent une variation du broadcast receiver. Lintrt de ces composants est de permettre de les partager avec dautres applications (en particulier les services et fournisseurs de contenu).
TMC
18
Dans Android, il ny a quune activit active la fois, c--d. en avant-plan ou foreground. Le systme dexploitation est libre de terminer une activit qui est en arrire-plan, lorsque la quantit de mmoire libre du systme est trop basse. Ainsi, une application Android, lorsquelle nest plus en avant-plan, doit tre capable de maintenir son tat pour garantir un fonctionnement seamless lutilisateur (retrouver les valeurs et achage prcdents lorsquil remet lapplication en avant-plan). Cest lapplication de grer son tat, ses donnes, et ses ressources an dtre prte tre interrompue ou bien termine tout moment. Pour rpondre ses vnements, des mthodes de rponse, callback, sont dnies : onCreate(), onResume(), onPause(), onDestroy()
TMC
19
Description des dirents callback et des actions entreprendre lors de leur rception : onCreate() : est appel quand lapplication dmarre ou redmarre. Initialiser les donnes statiques, tablir des liens vers les donnes et les ressources, positionner linterface avec setContentView(). onResume() : appel quant une activit passe en avant-plan. Reprendre le contrle des ressources exclusives. Continuer les lectures audio et vido ou les animations. onPause() : appel quand lactivit quitte lavant plan. Sauvegarder les donnes non encore sauvegardes, librer laccs aux ressources exclusives, stopper la lecture audio, vido et les animations. onDestroy() : appel quand lapplication est ferme. Nettoyer les donnes statiques de lactivit, librer toutes les ressources obtenues. Il est ncessaire de limiter le temps pris pour traiter la rception de ces callbacks : la thread principale de lapplication est celle soccupant de linterface :UI thread ; elle ne doit pas tre bloque plus de 5 secondes sous peine de voir le Application Not Responding .
TMC
blocked. If the main UI thread is blocked for too long, the Android system will shut down the activity due to a lack of response. This is especially important to respond quickly during the onPause() callback, when a higher-priority task (for example, an incoming phone call) is entering the foreground.
Figure 3.2 shows the order in which activity callbacks are called.
20
onCreate()
onStart()
onRestart()
onResume()
onStop()
onDestroy()
TMC
21
Pour pouvoir dvelopper une application Android, on utilise : le kit de dveloppement fourni par Google ; un des dirents simulateurs de terminaux communicants. Ces dirents lments peuvent tre intgrs et utiliss dans lIDE, Integrated Development Environment , Eclipse. Pour pouvoir utiliser lAPI Bluetooth sur le simulateur, on utilise une bibliothque permettant de simuler son fonctionnement en utilisant la pile de communication TCP/IP de la machine hte. En eet, le simulateur ne prends pas en charge la prsence ventuelle dun composant bluetooth sur la machine hte. Pour cela, on va installer : Eclipse ; le SDK dAndroid ; une bibliothque pour lutilisation du Bluetooth ;
TMC
22
On slectionne Eclipse, pour procder son installation. On peut galement utiliser la commande :
$ sudo apt-get install eclipse
TMC
23
TMC
24
Il faut ajouter la ligne export PATH=${PATH}:${HOME}/ANDROID/android-sdk-linux_86/tools la n du chier ~/.bashrc, pour laccs aux commandes du SDK. il faut ajouter le plugin Android Developement Tools (ADT) dans Eclipse : Allez dans le menu Help install new software , et rajoutez le site https://dl-ssl.google.com/android/eclipse/ slectionnez les Developper Tools ; acceptez linstallation dlments non signs. Allez dans le menu Window Preferences : slectionnez Android ; indiquez dans le zone de saisie le chemin daccs au SDK : /home/pef/ANDROID/android-sdk-linux_86/ Vous mettrez votre nom de compte la place de pef . . .
TMC
25
Allez dans le menu Window Android SDK and AVD Manager : slectionnez la plate-forme 2.2 vous pouvez retourner dans le menu Window Preferences pour vrier la prsence de cette plate-forme. installer une bibliothque pour lutilisation du Bluetooth : http://github.com/cheng81/Android-Bluetooth-Simulator
$ sudo apt-get install git-core $ cd ANDROID $ git clone git://github.com/cheng81/Android-Bluetooth-Simulator.git $ cd Android-Bluetooth-Simulator
TMC
13 Le contenu du SDK
26
TMC
les APIs Android ; les outils de dveloppement (dans le rpertoire tools) : DDMS, Dalvik Debug Monitoring Service : le dbogueur ; AAPT, Android Asset Packaging Tool : outil de construction des packages dapplication (.apk) ; ADB, Android Debug Bridge : copier des chiers, dployer des applications ; SQLite3 : pour la gestion des BDs ; MkSDCard : pour crer une SDCard virtuelle ; dx : convertir les .class Java en bytecode Android .dex. lmulateur android : interactif, avec possibilit de simuler la gestion dappel tlphonique et de SMS ; plusieurs skins pour tester dirents form factors (cran, orientation, etc.) ; chaque application est excute dans une VM Dalvik, ce qui permet de tester et de dboguer les applications dans un environnement rel . une documentation : http://developer.android.com/guide/index.html une communaut de dveloppeur : http://developer.android.com/resources/community-groups.html et sur Stack Overow : http://stackoverflow.com/ des exemples de code.
27
Allez dans le menu Window Android SDK and AVD Manager , puis prendre Virtual Devices (avec les choix par dfaut) :
TMC
15 Connexion lmulateur
pef@pef-desktop:~/ANDROID/android-sdk-linux_86/tools$ telnet localhost 5554 Trying 127.0.0.1... Connected to localhost. Escape character is ^]. Android Console: type help for a list of commands OK help Android console command help: help|h|? event geo gsm kill network power quit|exit redir sms avd window OK print a list of commands simulate hardware events Geo-location commands GSM related commands kill the emulator instance manage network settings power related commands quit control session manage port redirections SMS related commands manager virtual device state manage emulator window
28
Il est possible de se connecter au terminal virtuel laide de la commande telnet sur le port indiqu dans le nom de la fentre de lmulateur :
TMC
29
Puis on dnit les options de lapplication : Package Name ; Activity ; Application name ; la version de la plateforme.
TMC
30
Ce code : dnit une activity, par hritage de la classe Activity ; positionne son interface utilisateur par lutilisation de setContentView().
TMC
31
TMC
19 Linterface de lActivity
32
Elle est dnie par : lutilisation dun container vertical qui remplit tout lcran qui contient une tiquette faisant rfrence au contenu dune chane dnie dans les ressources (rpertoire res/).
<?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>
TMC
20 Le chier AndroidManifest.xml
Le contenu du chier res/layout/main.xml :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.cryptis.tmc.helloworld" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWorld" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
33
TMC
21 Le chier AndroidManifest.xml
34
Un namespace est dnie xmlns:android qui est uniquement utilis pour les attributs du chier XML et non pour les lments, avec lexception de lattribut package de llment manifest. . . Dautres lments : uses-permissions : les permissions ncessaires lapplication ; permission : dclarer des permissions ncessaires aux autres applications dans le but davoir accs au donnes de lapplication ; instrumentation : indiquer le code appeler lors de la rception dvnements systmes comme le lancement dune activit, pour monitoring ou du logging ; uses-library : utiliser dautres composants, comme le service de localisation ; uses-sdk : <uses-sdk minSdkVersion="2"/> pour des sous-versions du SDK ; application : dnir lapplication elle-mme.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="edu.cryptis.tmc.monappli"> <uses-permission android:name="android.permission.ACCESS_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission <application> ... </application>
TMC
</manifest>
35
Il est possible pour dnir le contenu du chier AndroidManifest.xml dutilis lditeur spcialis fourni par Eclipse :
TMC
36
TMC
37
TMC
AndroidManifest.xml ; R.java : contient les rfrences, ID , dirents lments de lapplication ; build.xml et default.properties : utilis par Ant ; bin/ : contient lapplication une fois compile ; bin/classes/ : les classes Java compiles ; bin/classes.dex : lexcutable cr partir de ces classes ; bin/appli.ap_ : contient les ressources de lapplication en chier Zip ; bin/appli-debug.apk ou bin/appli-unsigned.apk : lapplication Android ; Ce chier .apk est sign lectroniquement par une cl avec jarsigner. libs/ : les bibliothques tierces ncessaires lapplication ; assets/ : les chiers multimdias et autres chiers ncessaires lapplication ; src/ : les sources de lapplication ; res/ pour les ressources : res/layout/ : les chiers au format XML pour dnir linterface. res/drawable/ : les chiers images pour linterface ; res/menu/ : chier de dnition en XML des menus ; res/values/ : pour les chanes de caractres, les constantes (permet de facilement internationaliser une application) ; res/xml/ : pour des chiers au format XML.
38
Chaque chier doit avoir un nom unique en excluant son extension : toto.jpg et toto.dat vont entrer en conit.
Pour rfrencer une ressource Il faut utiliser la mthode getResources().openRawResource(R.raw.ma_ressource); o ma_ressource correspond au nom du chier.
TMC
24 Les prfrences
39
Il est possible de disposer dun systme de gestion de prfrences dont laccs est partag entre les dirents lments constituants lapplication. Pour accder aux prfrences, on utilisera la mthode getSharedPreferences(). Ces prfrences sont organises sous forme dobjet de la classe SharedPreferences et chacun de ces objets peut recevoir un nom. Ensuite, pour un de ces objets on peut dnir un ensemble dassociations de type (cl, valeur).
1 2 3 4 5 1 2 SharedPreferences reglages = getSharedPreferences(MesPrefs, MODE_PRIVATE); SharedPreferences.Editor editeurPref = reglages.edit(); editeurPref.putString(Nom, toto); editeurPref.putBoolean(Inscrit, true); editeurPref.commit();
Dans la ligne 2, le deuxime argument de la mthode getString est la valeur retourner dans le cas o il ny aurait pas de valeur associe la cl Nom .
TMC
25 Finaliser lapplication
Nommer lapplication On ajoutera dans le manifest :
1 1 <application android:label="Le nom de mon application">
40
Lapplication portera comme nom, le contenu de la chane appele app_name et dnie dans le chier strings.xml Associer une icone lapplication On ajoutera dans le manifest :
1 <application android:icon="@drawable/mon_icone">
Pour dnir licone, il faut : dnir cette icone au format PNG suivant 3 tailles direntes : 36x36, 48x48 et 72x72 suivant la densit de lcran qui peut tre basse, moyenne ou grande ; stocker la version 36x36 dans res/drawable-ldpi/ sous le nom mon_icone.png stocker la version 48x48 dans res/drawable-mdpi/ sous le nom mon_icone.png stocker la version 72x72 dans res/drawable-hdpi/ sous le nom mon_icone.png Android choisira automatiquement la taille la mieux adapte.
TMC
41
Pour dboguer lapplication Pour pouvoir dboguer lapplication dans Eclipse, il est ncessaire dajouter lattribut android:debuggable="true" dans llment application dans le manifest. Lors de la diusion de lapplication, cet attribut doit tre modi.
TMC
42
...
Log.i(TAG, "Dans la methode Truc()");
Le TAG permet ensuite de ltrer au niveau du dbogueur, LogCat dEclipse, les messages que lon veut suivre.
TMC
27 Intent(ion)
qui cela correspond ?
43
Une application Android est constitue de composants logiciels faiblement coupls qui correspondent chacune une activit indpendante. Parmi ces activits, lune est plus importante que les autres : elle apparait dans le launcher . On utilise un message, un intent pour demander au systme de dclencher une activit. Cette intention peut tre plus ou moins spcique, ce qui laisse une plus grande libert pour le choix de ou des activits qui vont la satisfaire. Analogie avec le Web Une analogie existe avec le protocole HTTP : un verbe + URL vers une ressource (page web, image, programme serveur). Le verbe correspond GET, POST etc. Un intent reprsente une action + un contexte et il existe plus dactions et plus de composants pour les raliser. la manire du navigateur web qui sait traiter le verbe+URL, Android sait trouver lactivit correspondante.
TMC
27.1 Intent(ion)
Intent Donnes
44
action + donnes les donnes sont indiques sous forme dune URI, comme content://contacts/people/1 Action les actions sont des constantes, comme ACTION_VIEW qui dclenche une visionneuse, ACTION_EDIT pour diter une ressource, ACTION_PICK pour slectionner un lment suivant une URI reprsentant une collection comme content://contacts/people. Si on cre un intent avec laction ACTION_VIEW et lURI content://contacts/people/1 : Android va chercher et ouvrir une activit capable dacher cette ressource. Dautres critres peuvent tre ajouts dans lintent categorie type MIME un component lactivit principale sera dans la catgorie LAUNCHER, mais les autres activits seront dans DEFAULT ou ALTERNATIVE. pour indiquer le type de ressources sur lequel laction va tre faite pour indiquer la classe de lactivit qui est suppose recevoir lintent. Rduit la porte de lintent mais permet de simplier le contenu de lintent. permet dajouter des donnes transmettre au rcepteur.
TMC
Extras
45
On indique quels sont les intents attendus par un composant dans le chier manifest, laide dintent-filter :
Rendre plus spcique le rcepteur Lorsque le systme gnre des vnements, il est possible de dclencher : un service plutt quune activit ; une activit suivant un contexte spcique : le mme intent sur une certaine donne dclenche une activit mais sur une autre donne dclenche une autre activit. On utilise des rcepteurs dintent implmentant linterface BroadcastReceiver. Ces rcepteurs sont des objets qui reoivent des intents, surtout diuss en broadcast, et qui ragissent en envoyant dautres intents pour dclencher une activit, un service. . .
TMC
29 Linterface BroadcastReceiver
Elle est constitue de seulement une mthode :onReceive(). Les objets implmentants cette interface doivent tre dclars dans le manifest :
1 <receiver android:name=".MaClasseRecepteur" />
46
Cet objet nest excut que jusquau retour de la mthode et sera enlever du systme : ils ne peuvent attendre de callback (pas douverture de dialog par exemple). Exception de traitement Si on veut que le rcepteur soit attach un composant logiciel avec une dure de vie plus longue, comme celle du systme : il ne faut pas dclarer le rcepteur dans le manifest ; il faut enregistrer le rcepteur laide de la mthode registerReceiver() lors du callback onResume() de lactivit ; il faut d-enregistrer le rcepteur laide de la mthode unregisterReceiver() lors du callback onPause() de lactivit ou lorsque lon ne dsire plus recevoir dintent associ. Attention Lutilisation dobjet Intent pour passer des donnes quelconques nest possible que si le rcepteur est actif (possibilit de manquer des intents quand inactif).
TMC
30 Linterface graphique
47
Il existe deux manires de dnir une interface graphique : laide de chier de description rdig suivant le format XML avantages : simplicit de conception, indpendance avec le code Java ; inconvnients : dnition statique qui ne peut voluer au cours de la vie de lapplication ; avec du code Java avantages : peut voluer de manire dynamique durant la vie de lapplication (exemple : dnir le contenu dun menu permettant de choisir un lment parmi une liste construite par lapplication) ; inconvnients : dicults dorganisation, le code est mlang celui de lapplication. tir parti des deux. . . et aussi, utiliser une interface au format HTML avec le widget bas sur WebKit
TMC
31 Utilisation dXML
48
Les chiers au format XML : sont stocks en tant que ressource dans : res/layout ; dnissent une hirarchie entre les widgets : un arbre dlments de widgets et de containers ; les attributs de ces lments dnissent les proprits : laspect dun widget comme celui dun bouton avec textStyle="bold" le comportement dun container. loutil aapt parse ces chiers et construit le chier R.java contenant des rfrences pour dsigner un widget dans le code de lapplication.
TMC
32 Utilisation dEclipse
Il est possible dutiliser lditeur intgr dans Eclipse :
49
TMC
50
TMC
Sur cet exemple, les widget : sont de la classe Button et TextView qui hritent de la classe android.view.View ; disposent dun identiant avec lattribut android:id ; achent linitialisation le texte qui est dnie par lattribut android:text. Pour le TextView on remarque quil fait rfrence une chane dnie dans le chier strings.xml et rfrence par "@string/hello. les attributs android:layout_width et android:layout_height sont dnis fill_parent ; Quoi correspondent les @ ? dnir une identit pour une rfrence ultrieure : @+id/mon_id
51
...
public static final class layout { public static final int main=0x7f030000;
TMC
la mthode setContentView permet dappeler linterface dnie dans un chier XML : setContentView(R.layout.main) on utilise la mthode findViewById() laquelle on passe lidentiant numrique dni dans le chier R.java. Exemple : Button btn = (Button) findViewById(R.id.button01) On utilise le nom dnie dans le chier XML dinterface, ici button01 . on accroche un listener : btn.setOnClickListener(. . . ) pour obtenir lvnement (clic du bouton).
35 Dautres Widgets
Il existe direntes classes et sous-classes :
52
ImageView : avec les attributs android:src, comme par exemple : android:src="@drawable/logo" Il est galement possible dutiliser la mthode setImageURI() pour utiliser un Content Provider ImageButton EditText : pour une zone de saisie. Avec les attributs : android:numeric pour ne rentrer que des chires ; android:singleLine="false" pour indiquer si la saisie se ralise sur une ligne ou plus ; android:password : pour lentre masque dun mot de passe.
TMC
53
Lorsque lon veut intragir avec lutilisateur de manire rapide et simple, sans avoir crer une activit ddie, on peut crer une fentre de Dialog : Activity.showDialog() : acher un dialogue ; Activity.onCreateDialog() : une fonction de callback lors de la cration du dialogue et son ajout la liste des autres dialogues de lactivit ; Activity.onPrepareDialog() : permet de mettre jour un dialogue juste avant son achage ; Activity.dismissDialog() : ferme un dialogue et retourne lactivit ; Activity.removeDialog() : supprime le dialogue de la liste des dialogues. On peut dnir lapparence du dialogue laide : dun chier layout au format XML ; la mthode setContentView(). Il existe des dialogues prdnis : AlertDialog, CharacterPickerDialog, DatePickerDialog, ProgressDialog et TimePickerDialog. On peut rcuprer les rfrences vers les lments de linterface laide de Dialog.findViewById().
TMC
37 Notications Toast
1 2 3 5 6 Context context = getApplicationContext(); CharSequence text = "Hello toast!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show();
54
Cest un message qui va venir en premier plan et disparaitre automatiquement aprs un temps limit.
Ou plus simplement :
1 Toast.makeText(context, text, duration).show();
TMC
38 Gestion du Bluetooth
55
Avec Bluetooth, il est possible de : chercher dautres appareils, devices, proximit ; tablir une communication de type ux laide dune socket bluetooth. Il existe 4 classes pour grer le bluetooth : BluetoothAdapter : reprsente linterface matrielle bluetooth, le bluetooth device sur lequel tourne Android ; BluetoothDevice : reprsente chaque appareil distant avec lequel on peut communiquer, remote bluetooth device ; BluetoothSocket : permet de dclencher une requte de connexion vers un appareil distant et dtablir une communication ; BluetoothServerSocket : permet de dnir un serveur en attente de connexions en provenance des appareils distants. Pour accder linterface bluetooth :
1 1 2 BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
TMC
1. pour dclencher une dcouverte du voisinage, discovery, tablir des communications 2. pour modier les proprits de linterface.
56
Par dfaut, linterface Bluetooth nest pas active pour conomiser la batterie, et pour des questions de scurit. Il est ncessaire de lactiver : soit avec la mthode enable(), si lon dispose de la permission BLUETOOTH_ADMIN ; soit laide dune sous-activit asynchrone dont on attendra le rsultat :
1 2 String enableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE; startActivityForResult(new Intent(enableBT), 0);
Lutilisateur sera prvenu et une demande dautorisation lui sera ache. Dans le premier cas, il vaut mieux prvenir lutilisateur de la mise en activit de linterface.
TMC
40 Bluetooth
57
Lutilisation de Bluetooth se fait au travers dun service. Pour obtenir une rfrence vers ce service, il faut utiliser la mthode getSystemService de la classe Context qui permet daccder au systme :
1 2 String nom_service = Context.BLUETOOTH_SERVICE; BluetoothDevice bluetooth = (BluetoothDevice)getSystemService(nom_service);
Lobjet BluetoothDevice Ensuite, il est possible dutiliser les mthodes suivantes : enable et disable : activer ou dsactiver linterface ; getName et setName : pour manipuler le nom de linterface (si elle est active) ; getAddress : pour obtenir ladresse de linterface ; get/setMode et : pour congurer le mode de dcouverte discoverable ou connectable get/setDiscoverableTimeout : pour congurer le temps utilis pour cette dcouverte ;
1 2 bluetooth.setName(YOBIBO); bluetooth.setMode(BluetoothDevice.MODE_DISCOVERABLE);
TMC
58
Pour la dcouverte, discovery, des autres appareils bluetooth, il faut : tre en mode dcouverte ; dmarrer un cycle de dcouvrable : bluetooth.startPeriodicDiscovery(); bluetooth.startDiscovery(true); Ces deux mthodes sont asynchrones, et diusent un intent REMOTE_DEVICE_FOUND_ACTION chaque dcouverte dun appareil bluetooth. obtenir la liste des appareils dcouverts : listRemoteDevices qui retourne un tableau de chane de caractres, contenant les adresses de chacun de ces appareils ; obtenir le nom dun appareil : getRemoteName en donnant en paramtre ladresse de linterface. Pour le pairing Il faut utiliser les mthodes suivantes : createBonding : pour tablir le lien (cancelBonding pour labandonner) ; setPin : pour indiquer le PIN de scurit utiliser (cancelPin pour le rednir). Une fois un lien tablie avec un appareil, ce lien est ajout la BD de lappareil et sera utilis de nouveau lors dune prochaine rencontre du mme appareil.
TMC
59
public void onCreateBondingResult(String address, int result) throws RemoteException{ if (result == BluetoothDevice.RESULT_SUCCESS) { String connectText = Connected to + bluetooth.getRemoteName(address); Toast.makeText(getApplicationContext(), connectText, Toast.LENGTH_SHORT); }
TMC
Pour couter les requtes de pairing, il faut dnir un BroadcastListener ltrant les intents ACTION_PAIRING_REQUEST.
41 Surveiller la dcouverte
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 }; registerReceiver(discoveryMonitor, new IntentFilter(dStarted)); registerReceiver(discoveryMonitor, new IntentFilter(dFinished)); } } } else if (dFinished.equals(intent.getAction())) { // Discovery has completed. Toast.makeText(getApplicationContext(), "Discovery Completed...", Toast.LENGTH_SHORT).show(); BroadcastReceiver discoveryMonitor = new BroadcastReceiver() { String dStarted = BluetoothAdapter.ACTION_DISCOVERY_STARTED; String dFinished = BluetoothAdapter.ACTION_DISCOVERY_FINISHED; @Override public void onReceive(Context context, Intent intent) { if (dStarted.equals(intent.getAction())) { // Discovery has started. Toast.makeText(getApplicationContext(), "Discovery Started...", Toast.LENGTH_SHORT).show();
60
TMC
61
Il faut modier le chier AndroidManifest.xml pour rajouter la permission dutiliser laccs Internet (en plus de celle daccs bluetooth et son administration) :
En eet, la simulation de bluetooth passe par lutilisation de la pile TCP/IP. . . Modications du source de lapplication Pour laccs la bibliothque, il faut : changer limportation : import android.bluetoothimport dk.itu.android.bluetooth appeler BluetoothAdapter.SetContext(this); par exemple dans la mthode onCreate() appel lors de linitialisation de lactivity. Lancer le serveur de liaison Dans Eclipse, il faut lancer btemu ou directement sur la ligne de commande :
$ java -jar btsim-server.jar Server started on port 8199 ADB command: adb press any key to exit
TMC
62
Remarques : ligne 4 : la variable saisie correspond un widget de type EditText ; dans la mthode getBytes(), il est possible dindiquer un encodage comme "ISO-8859-1" ou "UTF-8" pour traduire les ventuels caractres accentus ; ligne 5 : on traduit la valeur retourne par la fonction de hashage en un entier de taille variable, BigInteger ; ligne 6 : ce grand entier est ensuite ach sous forme hexadcimal, puis aect au widget de type TextView appel mon_texte.
TMC
63
TMC
64
Il est possible de rcuprer des cls RSA lintrieur dune application Android : les convertir dans une reprsentation DER, c--d. en notation ASN.1 ; placer les chiers les contenant dans le rpertoire res/raw ; utiliser la mthode getResources() pour obtenir des rfrences vers ces chiers ; utiliser la classe KeyFactory pour importer les cls.
1 2 3 4 5 6 7 9 10 11 12 13 14 KeyFactory kf = KeyFactory.getInstance("RSA"); InputStream fic_cle = getResources().openRawResource(R.raw.ma_cle_publique); byte[] cle_pub_asn1 = new byte[fic_cle.available()]; fic_cle.read(cle_pub_asn1); fic_cle.close(); X509EncodedKeySpec cle_pub = new X509EncodedKeySpec(cle_pub_asn1); kf.generatePublic(cle_pub); fic_cle = getResources().openRawResource(R.raw.ma_cle_privee); byte[] cle_priv_asn1 = new byte[fic_cle.available()]; fic_cle.read(cle_priv_asn1); fic_cle.close(); PKCS8EncodedKeySpec cle_privee = new PKCS8EncodedKeySpec(cle_priv_asn1); kf.generatePrivate(cle_privee);
TMC