Vous êtes sur la page 1sur 58

Android

Introduction la programmation
Infantino Giuliano
Ig-android@hotmail.be

Android - Dfinition
Android est un systme dexploitation Open Source pour smartphones, PDA et terminaux mobiles conu par Android, une startup rachete par Google, et annonc officiellement le 15 novembre 2007. Afin de promouvoir ce systme dexploitation ouvert, Google a su fdrer autour de lui une trentaine de partenaires runis au sein de lOpen Handset Alliance. Android-france.fr

Universit de Mons

Infantino Giuliano | SEMI

Environnement de travail

Universit de Mons

Infantino Giuliano | SEMI

Labo 1 : Installation + Hello World


Tches: 1. Installation du JDK Java. 2. Installation du SDK Android. 3. Installation dEclipse et pack ADT (Dveloppeur). 4. Cration de la premire application. 5. Exercices

Universit de Mons

Infantino Giuliano | SEMI

1.1 Installation JDK Java


Tlchargement du JDK Java

Universit de Mons

Infantino Giuliano | SEMI

1.2 Installation du SDK Android


Tlchargement du SDK Android (Windows Version)

Universit de Mons

Infantino Giuliano | SEMI

1.2 Installation du SDK Android


Android SDK Manager :
Versions installer (2.xx = Smartphone) (>= 3.xx = Tablette)

Universit de Mons

Infantino Giuliano | SEMI

1.2 Installation du SDK Android

Universit de Mons

Infantino Giuliano | SEMI

1.3 Installation dEclipse et ADT


Eclipse : Tlchargement d'Eclipse

Universit de Mons

Infantino Giuliano | SEMI

1.3 Installation dEclipse et ADT


ADT : Package complmentaire Eclipse contenant les outils ncessaires la programmation pour Android.

Universit de Mons

Infantino Giuliano | SEMI

10

1.3 Installation dEclipse et ADT

Name : ADT Plugin Location : https ://dl-ssl.google.com/android/eclipse/ Appuyez ensuite sur OK


Universit de Mons
Infantino Giuliano | SEMI 11

1.3 Installation dEclipse et ADT

Slectionnez lensemble des fichiers, cliquez sur Next , acceptez lensemble des licences, et finalement cliquez sur Finish
Universit de Mons
Infantino Giuliano | SEMI 12

1.3 Installation dEclipse et ADT

Universit de Mons

Infantino Giuliano | SEMI

13

1.4 Cration de la premire application


Barre doutils Eclipse
: Consultation de SDK Manager.
Consultation et mise jour des bibliothques Android

: Cration dun Android Virtuel (Smartphone ou Tablette Virtuelle)


Tests en toute scurit

: Cration dun nouveau projet.


Cest de ce cot que cela se passe J
Universit de Mons
Infantino Giuliano | SEMI 14

1.4 Cration de la premire application


Cration dun Android Virtuel :
Version du software prsent sur votre Android virtuel.

Universit de Mons

Infantino Giuliano | SEMI

15

1.4 Cration de la premire application


Cration dun nouveau projet :

Nom du projet :

Universit de Mons

Infantino Giuliano | SEMI

16

1.4 Cration de la premire application


Version de votre future application (au choix mais en accord avec la version slectionne lors de la cration de votre Android virtuel)

Universit de Mons

Infantino Giuliano | SEMI

17

1.4 Cration de la premire application

Nom de votre application : Nom du Package (Au choix) : Activit principale:

Activit = Classe

Universit de Mons

Infantino Giuliano | SEMI

18

1.4 Cration de la premire application

1 2

: Gestion des projets, FirstProjectActivity est ici la classe principale du projet FirstProject . : Premire application. Au lancement, le contenu de la mthode onCreate() sexcute. : Excution de votre application.

Universit de Mons

Infantino Giuliano | SEMI

19

1.4 Cration de la premire application


Rsultat :

Universit de Mons

Infantino Giuliano | SEMI

20

1.5 Exercices
1. Installer lensemble des logiciels ncessaires 2. Crez votre premire application android

Universit de Mons

Infantino Giuliano | SEMI

21

Remarque : Cycle de vie dune application

Visible
Universit de Mons
Infantino Giuliano | SEMI

Invisible
22

Labo 2 : Les fondamentaux


Tches: 1. 2. 3. 4. Widgets Graphiques Intents couteurs dvnements Exercices

Universit de Mons

Infantino Giuliano | SEMI

23

2.1 Widgets Graphiques

Drag & Drop


Universit de Mons
Infantino Giuliano | SEMI

et /ou

Code XML
24

2.1 Widgets Graphiques


Layout : LinearLayout RelativeLayout lments graphiques : Buttons TextView ImageButton ProgressBar CheckBox ToggleButon
Universit de Mons
Infantino Giuliano | SEMI 25

Layout = Schma de mise en place de vos lments graphiques.

2.1 Widgets Graphiques

Universit de Mons

Infantino Giuliano | SEMI

26

2.1 Widgets Graphiques


Mise en place de llment (modification du code main.xml) :

<TypeElement
android: id=@+id/mId android: text= Mtexte android: attribut= valeur android: attribut= valeur />

Universit de Mons

Infantino Giuliano | SEMI

27

2.1 Widgets Graphiques


Mise en place de llment ( laide du Drag & Drop) :

Cliquez sur Graphical Layout. Slectionnez votre widget. Faites le glisser sur laperu.

Rmq : En cas de soucis, le code Xml (automatiquement gnr) des lments placs peut tre modifier dans le fichier main.xml Cfr Slide prcdent.
Universit de Mons
Infantino Giuliano | SEMI 28

2.2 Intents
Dfinition : Comme leur nom lindique, les intents sont des intentions. Ainsi si vous souhaitez, par exemple, dmarrer une nouvelle activit, lopration sera effectue par un Intent. Les intents sont galements disponibles lors dvnements tels que la rception de sms, le branchement dun priphrique usb,

Intent = Intention

Universit de Mons

Infantino Giuliano | SEMI

29

2.2 Intents
Exemple dutilisation:

Commentaire:
Cration dun objet mu partir de la classe Intent. Les paramtres envoys au constructeurs sont lactivit principale (ici UsbActivity.this) et lactivit (classe) que lon souhaite ouvrir (Device.class). Ensuite la fonction startActivity() se charge donc douvir une nouvelle activit. La fonction startActivity() se verra remplace par la fonction startActivtyforResult() si vous souhaitez par exemple attendre une rponse de la nouvelle activit ouverte.
Universit de Mons
Infantino Giuliano | SEMI 30

2.3 couteurs dvnements


Dfinition :
Les couteurs dvnements sont dnomms BroadCast receiver , ceux si ragissent ds la rception dun intent (intention) spcifique. Le Broadcast receiver ne contient que la mthode OnReceive() quil nous est donc possible dimplmenter.

Exemple dutilisation :
Affichage dun texte lors de la rception dun sms (<- intent), Demande de permission dutilisation lors dun branchement usb (<- intent).

Universit de Mons

Infantino Giuliano | SEMI

31

2.3 couteurs dvnements


Code exemple:

Commentaire :
Les lignes de codes ci-dessus sont ajouter dans le manifest de votre application pour filtrer les intents envoys votre application. Par exemple ici, on filtre lintent ayant laction USB_DEVICE_ATTACHED . Cet intent est celui qui peut tre rcupr par lapplication lorsque un priphrique USB (non-HID) est connect.

Universit de Mons

Infantino Giuliano | SEMI

32

2.3 couteurs dvnements


Code exemple :
Dans la mthode Oncreate () :

Commentaire:

Rcupration de lintent si celui-ci a t filtr par notre intent-filter (voir slide prcdent). Ensuite, on peut facilement travailler avec lintent et ainsi par exemple rcuprer le priphrique Usb qui vient dtre connect.

Commentaire:
Cette manire de rcuprer un priphrique usb ne fonctionnera quau branchement du priphrique. Pour un accs ultrieur, rfrez vous au Guide du Dveloppeur. Ils vous faudra listez les priphriques prsent, slectionnez celui quil vous faut, et demandez une permission daccs.
Universit de Mons
Infantino Giuliano | SEMI 33

2.4 Exercices
Crez une application contenant 2 activits Crez une interface graphique simple avec : Boutons, TextView, EditText dans les 2 activits. laide des boutons des 2 activits, permettez le passage dune activit lautre en rcuprant le texte entr. Exemple application :

Universit de Mons

Infantino Giuliano | SEMI

34

Labo 3 : Android - Usb Host


Tches : 0. Permission Ncessaire 1. Lancement dun nouveau Thread 2. Dtection du priphrique 3. Envoi Rception de donnes 4. Exercices

Universit de Mons

Infantino Giuliano | SEMI

35

3.0 Permissions ncessaires


Codes ajouter dans AndroidManifest.xml

Commentaire:
Cette ligne permet aux utilisateurs voulant installer votre application de savoir que celle-ci ncessite le support de l USB_HOST .

Universit de Mons

Infantino Giuliano | SEMI

36

3.1 Lancement dun Thread


Dfinition :
Un thread correspond un fil daction, une sorte de processus. Ainsi une activit en cours dxcution sexcute dans un Thread. Cependant une Activit peut contenir plusieurs Threads, mais pourquoi ? Pour simplement effectuer des tches darrirres plan sans interfrer sur le Thread principal. Ainsi, un envoi et rception de donnes un priphrique Usb seffectue dans un thread spar pour ne pas perturber le Thread principal

Universit de Mons

Infantino Giuliano | SEMI

37

3.1 Lancement dun Thread


Code Exemple :

Commentaire :
Le Thread ER est un nouveau thread dfini dans lactivit principale. Au lancement du nouveau Thread, le contenu de la mthode run() sexcute. Cependant si vous voulez, une fois vos oprations termines, communiquer avec le thread principal, vous aurez besoin dutilisez un objet Message (cfr ci-dessus). Pour cela il suffit de spcifier lHandler qui le rceptionnera. (LHandler permettant donc la rception du message et la communication entres les 2 Threads). La mthode obtainMessage() sans paramtre permet denvoyer un message blanc lHandler qui excutera le contenu de handleMessage(msg).

Universit de Mons

Infantino Giuliano | SEMI

38

3.2 Dtection du priphrique


Introduction : Il existe 2 mthodes pour accder un priphrique. La plus simple est lutilisation du priphrique lorsque celui-ci est connect ne ncessitant aucune demande de permission. Voir slide La seconde un peu plus longue consiste accder au priphrique plus tard aprs son branchement. Pour ce faire il nous faudra : Dtecter notre priphrique Demander la permission daccs ce dernier

Continuer les tches

Universit de Mons

Infantino Giuliano | SEMI

39

3.2 Dtection du priphrique


Code exemple :

Commentaire : Pour trouver les priphriques non HID, il suffit de crer un objet manager partir de la classe UsbManager, rcuprer le contexte du Service USB et finalement utiliser la mthode getDeviceList() qui renvoi lensemble des priphriques connects.

Universit de Mons

Infantino Giuliano | SEMI

40

3.2 Dtection du priphrique


Dans le Oncreate ():

La premire partie consiste a crr une demande de permission partir dun Intent, pour ce faire on utilisira la classe PendingIntent. Ensuite au moment o la demande sera effectue il faudra que celle-ci soit intercept par un couteur dvenments. Un BroadCastreceiver est donc ncessaire, il sappelle ici mUsbReceiver, et filtrera donc les demandes de permissions daccs au priphrique. Finalement la mthode request Permission permettra denvoyer la fentre popup lcran pour la demande de persmission qui sera filtr en arrire plan par le BroadCastReceiver mUsbReceiver.
Universit de Mons
Infantino Giuliano | SEMI 41

Commentaire :

3.2 Demande de permission


En dehors du OnCreate() :

Commentaire :

On rcupre tout dabord laction permission, ensuite on vrifie si elle correspond vraiment avec lIntent qui sera recu par le BroadCastReceiver si tel est le cas alors on rcupre le priphrique dans les extras de lIntent et on sassure quun priphrique a bien t envoy et a les permission daccs. Si une des conditions nest pas vrifie alors, on affiche Permission denied dans le logcat dEclipse
Infantino Giuliano | SEMI 42

Universit de Mons

3.3 Envoi - rception de donnes


Introduction : Lenvoi et la rception des donnes peut tre tablie de 2 mthodes diffrentes, la mthode synchrone et asynchrone. Cependant, nous ne verrons quici lenvoi et la rception synchrone des donnes. Pour ce faire vous devrez :
Rcuperer linterface de communication du priphrique

Recherchez sur cette interfaces les points de communication et leur sens. tablir une connexion avec le priphrique Dclarez un Tableau de bytes qui fera office de Buffer Utilisez la mthode denvoi Utilisez la mthode de rception
43

Universit de Mons

Infantino Giuliano | SEMI

3.3 Envoi - rception de donnes


Rcupration de linterface :

Commentaire : Rcupration du nombre dinterface disponible sur le priphrique en vue dtablir une communication, ensuite, affichage de ce nombre dans le LogCat dEclipse. Si nintf a pour valeur 1 cela signifie quil ny a donc quune interface de communication disponible lindex 0.

Universit de Mons

Infantino Giuliano | SEMI

44

3.3 Envoi - rception de donnes


Rcupration des points de communication :

Commentaire : Ce code exemple, permet de connaitre le nombre de Endpoint disponible et de types XFER_BULK , apte tablir un transfert de donnes. Les rsultats sont affichs dans le LogCat dEclipse ainsi que la direction savoir IN ou OUT qui seront cruciaux dans la suite du programme. Finalement nous assignons les points de sorties 2 variables de types Endpoint (sil ny a videmment que 2 Endpoint).

Universit de Mons

Infantino Giuliano | SEMI

45

3.3 Envoi - rception de donnes


tablissement de la connexion:

Commentaire :
Par lintermdiaire de lobjet mUsbManager, on ouvre le priphrique voulu, et si cette opration se droule sans encombre, alors cette mthode renvoi une connexion fonctionnelle (UsbDeviceConnection). Finalement, pour que la connexion tablie aie le droit exclusif linterface du priphrique, il faut pour cela les demander.

Universit de Mons

Infantino Giuliano | SEMI

46

3.3 Envoi-rception de donnes


Code Exemple :

Commentaire :
Aprs avoir convertis les donnes en bytes, il vous suffira de les envoyer laide des mthodes bulkTransfer() et de mme pour la rception. Cest ici quon peut voir toute limportance du sens de vos Endpoints.

Universit de Mons

Infantino Giuliano | SEMI

47

3.4 Exercices
Crez une application aux graphismes simples. Crez un thread spar qui devra se charger de rcuprer la liste des priphriques connects. Sauvegardez la liste et affichez-l dans le Thread principale

Universit de Mons

Infantino Giuliano | SEMI

48

Labo 4 : Clavier et souris externe


Tche : 1. 2. 3. 4. Identifier les priphriques HID Gestion dvnements Gestion de la Wiimote Exercices

Universit de Mons

Infantino Giuliano | SEMI

49

4.1 Identifier priphriques HID


Introduction : Pour dtecter un priphrique non-HID nous avions utilis dans les labos prcdents, la mthode getDeviceList(), malheureusement celle-ci ne dtecte pas les priphriques HID

Universit de Mons

Infantino Giuliano | SEMI

50

4.1 Identifier priphriques HID


Code exemple :

Commentaire :
La solution rside dans lutilisation de la classe InputDevice ! Cration dun tableau dentiers qui contiendra les Ids des priphriques connects. Une fois les Ids rcuprs, on peut afficher le nom des priphriques connects laide des mthodes getName() et toString().

Universit de Mons

Infantino Giuliano | SEMI

51

4.2 Gestion des vnements


Introduction :
Comme nous lavions vu lors dimplmentation de bouton, il est possible de grer des vnements sur des vues ou sur des actions. Le but de ce labo est de rcuprer les coordonnes x et y du curseur provenant dune souris branch la tablette et galement visionner quels sont les touches presses par lutilisateur sur un clavier branch galement la tablette. Et finalement, en utilisant lapplication open source Bluez-IME, crer notre application permettant la reconnaissance des boutons prsents sur la Wiimote

Universit de Mons

Infantino Giuliano | SEMI

52

4.2 Gestion des vnements


Souris :

Commentaire :
Par rcupration de la vue principale, il nous faut crer un OnHoverListener() dont la mthode onHover() sera appel lors du mouvement dun curseur sur lcran (En vrifiant que le laction de lvnement est bien un mouvement HOVER_MOVE )
Universit de Mons
Infantino Giuliano | SEMI 53

4.2 Gestion des vnements


Clavier

Commentaire :
Pour grer des vnements qui ont lieu sur le clavier, on peut par exemple, rcrire le contenu de mthode parent OnKeyDown(). Ainsi, ici, on rcupre la KeyCode qui vient dtre press et on supprime une partie de celle-ci pour finalement nafficher que la lettre qui vient dtre presse

Universit de Mons

Infantino Giuliano | SEMI

54

4.3 Gestion de la Wiimote


Introduction : La Wiimote est un quipement Bluetooth qui quipe toutes les consoles Wii. En vue de rcuprer des informations provenant de celles-ci on utilisera un Driver fourni par lapplication BlueZ IME. Cette application contient en fait des bibliothques cr partir dun code crit en langage C et permettant ainsi de manipuler nativement le Bluetooth.

Universit de Mons

Infantino Giuliano | SEMI

55

4.3 Gestion de la Wiimote


Tlchargement et Installation : Tlchargez BlueZ IME (Support WII)

Commentaire :
Dplacez le fichier .apk dans la racine de votre tablette, et installez le.

Universit de Mons

Infantino Giuliano | SEMI

56

4.3 Gestion de la Wiimote


Dmarrer avec lapplication Test:
Une application exemple est disponible ici ou vous pouvez rcuprer lensemble des fichiers laide dun client svn : http://android-bluez-ime.googlecode.com/svn/trunk/

Commentaire:
Le code prsent utilise lapplication installe dans le slide prcdent, comprenez le code pour lutilisez votre tour.

Universit de Mons

Infantino Giuliano | SEMI

57

4.4 Exercices
Crez une application permettant de lister tous les priphriques connects, fixez la localisation de la souris, de reconnaitre une touche presse au clavier, et finalement qui gre la WiiMote

Rsultat Exemple :

Universit de Mons

Infantino Giuliano | SEMI

58