Beruflich Dokumente
Kultur Dokumente
J.-F. Couchot
12 novembre 2012
.
.
.
.
.
.
.
.
.
3
3
3
3
3
3
3
3
4
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
5
5
5
6
6
7
7
7
7
7
7
7
7
9
9
10
10
10
12
12
12
12
12
13
13
13
14
14
14
14
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
15
15
17
17
18
18
19
Chapitre 1
I.1
Une activit
Cest la brique de base. Par dfaut une application est une activit. Cest un morceau de code qui sexcute
la demande de lutilisateur, de lOS,. . . et qui peut tre tu par lutilisateur ou lOS pour prserver la mmoire du
tlphone. Une activit peut interagir
avec lutilisateur en lui demandant des donnes
avec dautres activits ou services en mettant des intentions ou fournissant du contenu (voir ci dessous)
I.2
Un service
Cest lanalogue des services ou dmons qui sexcutent sur un OS classique. Cest un morceau de code qui
sexcute habituellement en arrire-plan entre le moment o il est lanc jusqu larrt du mobile.
I.3
Une Intention
Une intention (intent en anglais) est un message contenant des donnes mis par Android (lOS, une autre application, un autre service) pour prvenir les applications sexcutant de la survenue dun vnement : dplacement du
GPS, rception dun SMS. . .
I.4
Un fournisseur de contenus
Une application Android rpond normalement un besoin et fournit donc certaines fonctionnalits. On appelle
cela un fournisseur de contenus. Une application doit normalement se dclarer comme fournisseur de tel ou tel contenu
(lorsquils sont identifis). Une autre application qui ncessiterait un moment ce contenu met une requte auprs
de lOS pour lobtenir. LOS lance alors directement lapplication dclare comme fournisseur.
II
II.1 Arborescence
Un projet Android dvelopp via lADT possde peu ou prou larborescence de fichiers et dossiers suivante :
Le dossier assets (un bien) qui contient les paquetages externes utiliss par lapplication dveloppe : les fontes,
les fichiers jar, etc.. . .
Le dossier bin qui contient toutes les classes compiles (.class) ainsi quune archive excutable du projet (.apk)
Le dossier gen qui contient les fichiers gnrs par lADT, notamment R.java
Le dossier res qui contient les ressources statiques du projet, notamment :
les dossiers drawable : on y met les images du projet ;
le dossier layout : contient les descriptions XML de linterface graphique ;
II.3 Exercice
1. Faire en sorte que lorsquon passe en mode paysage (dans lmulateur Ctrl+F11) lapplication Hello World
affiche en plus Landscreen.
2. Comment faire en sorte que licne de lancement de lapplication Hello World soit le mme quelle que soit
la rsolution du mobile ? Modifier en consquence le dossier res.
3. Comment faire en sorte que licne de lancement de lapplication Hello World soit le fichier icon2.jpg
lorsque laffichage est en mode paysage ?
4. Comment faire en sorte que lapplication affiche les messages en franais si la langue du tlphone est le franais
et des messages en anglais sinon ?
5. Dans le code suivant extrait du fichier manifest.xml expliquer
(a) la ligne 1
(b) les ligne 2 4
1 < a c t i v i t y a n d r o i d : n a m e = " . H e l l o W o r l d A c t i v i t y " a n d r o i d : l a b e l = " @ s t r i n g / app_name " >
2
<intent f i l t e r >
3
< a c t i o n a n d r o i d : n a m e = " a n d r o i d . i n t e n t . a c t i o n . MAIN" / >
4
< c a t e g o r y a n d r o i d : n a m e = " a n d r o i d . i n t e n t . c a t e g o r y . LAUNCHER" / >
5
</ intent f i l t e r >
6 </ activity>
Chapitre 2
I Rendu visuel
Dans une application Android, linterface utilisateur est construite laide dobjets de type View et ViewGroup.
Les objets de type View sont les units de base, i.e. des composants grant les interactions avec lutilisateur. Les objets
de type ViewGroup organisent la manire dont sont prsents les composants. Un ViewGroup est classiquement
dfini laide dun Layout.
II
La construction dinterface peut se faire selon deux approches complmentaires : la premire est programmatique
(Java) et la seconde est une dclaration laide dun fichier XML.
On se passe compltement du fichier XML de description de lorganisation (dossier res/layout) dans une telle
approche programmatique.
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/txtvname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/name" />
<EditText
android:id="@+id/edtname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Il reste uniquement attacher cette organisation lactivit via setContentView (ligne 4).
1 p u b l i c c l a s s Program e x t e n d s A c t i v i t y {
2
p u b l i c void o n C r e a t e ( Bundle s a v e d I n s t a n c e S t a t e ) {
3
super . o n C r e a t e ( s a v e d I n s t a n c e S t a t e ) ;
4
s e t C o n t e n t V i e w ( R . l a y o u t . main ) ;
5
}
6 }
III
III.1 Exercice
On considre une activit dont la vue est lie au layout dfini par les fichiers res/layout/main.xml et
res/values/arrays.xml ci-dessous. Dire quels lments vont tre affichs, comment . . .
1 <? xml v e r s i o n = " 1 . 0 " e n c o d i n g = " u t f 8" ? >
2 < L i n e a r L a y o u t x m l n s : a n d r o i d = " h t t p : / / s c h e m a s . a n d r o i d . com / apk / r e s / a n d r o i d "
3
a n d r o i d : o r i e n t a t i o n =" v e r t i c a l "
4
a n d r o i d : l a y o u t _ w i d t h =" f i l l _ p a r e n t "
5
a n d r o i d : l a y o u t _ h e i g h t =" f i l l _ p a r e n t " >
6
<CheckBox a n d r o i d : i d = "@+ i d / cbxYN "
7
a n d r o i d : l a y o u t _ w i d t h = " 20 dp "
8
a n d r o i d : l a y o u t _ h e i g h t = " 20 dp "
9
a n d r o i d : c h e c k e d =" f a l s e " / >
10
< RadioGroup a n d r o i d : i d = "@+ i d / r g G r o u p 1 "
11
a n d r o i d : l a y o u t _ w i d t h =" f i l l _ p a r e n t "
12
a n d r o i d : l a y o u t _ h e i g h t =" wrap_content "
13
a n d r o i d : o r i e n t a t i o n =" v e r t i c a l ">
14
< R a d i o B u t t o n a n d r o i d : i d = "@+ i d / RB1" a n d r o i d : t e x t = " B u t t o n 1 " / >
15
< R a d i o B u t t o n a n d r o i d : i d = "@+ i d / RB2" a n d r o i d : t e x t = " B u t t o n 2 " / >
16
< R a d i o B u t t o n a n d r o i d : i d = "@+ i d / RB3" a n d r o i d : t e x t = " B u t t o n 3 " / >
17
< / RadioGroup >
18
< S p i n n e r a n d r o i d : i d = "@+ i d / s p n S a i s o n s "
19
a n d r o i d : l a y o u t _ w i d t h =" wrap_content "
20
a n d r o i d : l a y o u t _ h e i g h t =" wrap_content "
21
a n d r o i d : e n t r i e s = " @array / s a i s o n s " / >
22
< D a t e P i c k e r a n d r o i d : i d = "@+ i d / d P d a t e "
23
a n d r o i d : l a y o u t _ w i d t h =" wrap_content "
24
a n d r o i d : l a y o u t _ h e i g h t =" wrap_content " / >
25
<ImageView a n d r o i d : i d = "@+ i d / i m g I c o n "
26
a n d r o i d : l a y o u t _ w i d t h =" wrap_content "
27
a n d r o i d : l a y o u t _ h e i g h t =" wrap_content "
28
android:layout_gravity = " center "
29
a n d r o i d : s r c = " @drawable / i c o n " / >
30 < / L i n e a r L a y o u t >
1 <? xml v e r s i o n = " 1 . 0 " e n c o d i n g = " u t f 8" ? >
2 <resources>
3
< a r r a y name= " s a i s o n s " >
4
<item>printemps < / item>
5
<item> ete < / item>
6
< i t e m > automne < / i t e m >
7
<item> hiver < / item>
8
</ array>
9 </ resources>
IV
Les Layouts
Les Layouts organisent le positionnement des composants graphiques dans linterface utilisateur. On nonce
les principales ci-dessous. On pourra se rfrer http://developer.android.com/guide/topics/ui/
declaring-layout.html.
IV.1
LinearLayout
Cette organisation aligne les composants dans une seule direction : verticalement ou horizontalement (en fonction
de la valeur lattribut android:orientation). Gre lalignement (android:gravity) du composant. Voir
http://developer.android.com/guide/topics/ui/layout/linear.html.
IV.2
RelativeLayout
Permet de dclarer des postions relativement par rapport au parent ou par rapport dautres composants. Voir
http://developer.android.com/guide/topics/ui/layout/relative.html.
IV.3
FrameLayout
On empile les composant les uns sur les autres. Chacun est positionn dans le coin en haut gauche en masquant
plus ou moins celui du dessous sauf en cas de composant transparent.
IV.4
TableLayout
Cette organisation agence les composants selon un quadrillage (comme avec llment <table> en HTML). Il
utilise pour cela llment <tableRow> qui dclare une nouvelle ligne. Les cellules sont dfinies par les composants
quon ajoute aux lignes.
IV.5
Travaux Pratiques
On se restreint dans une premire partie aux menus que lon peut lancer partir du bouton menu du tlphone,
soit les version dandroid 2.3.X. A partir de la version 3.0, ce bouton ntant plus ncessairement prsent, on doit
implanter une barre daction la place.
V.1
Exercices
Exercice
Complter le code pour quon puisse choisir entre trois niveaux et que cela charge trois grilles diffrentes correspondantes aux niveaux.
8
V.2
Mise en place
Le manifest doit prciser que lapplication vise ou la version minimum du sdk minSdkVersion, targetSdkVersion
et minSdkVersion est fixe 11 ou plus.
<manifest ... >
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
...
</manifest>
Dans lexemple prcdent, on a une application qui est telle que chacune des ses activits embarque la barre par
dfaut donne la figure ci-dessus.
lorsquelle est excute sur un Android 3.0 au moins. Dans une excution sur un Android 2.3.X ou moins, la barre
daction est fixe en haut de lcran.
Masquer la barre
Pour supprimer statiquement la barre daction dans une activit particulire, on modifie le manifest comme suit :
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
Pourle faire dynamiquement, on fait comme suit :
ActionBar actionBar = getActionBar();
// actionBar.hide();
// actionBar.show();
V.3
Pour intgrer un menu personnel dans une barre daction, on dclare que le menu est un item daction de la barre.
Pour cela il suffit de dfinir un menu en xml et de le gonfler comme la section Gonflage du menus dfini en XML .
Exercice
Complter le code pour quon puisse choisir entre trois niveaux et que cela charge trois grilles diffrentes correspondantes aux niveaux.
Chapitre 3
II
Exercice
Raliser le TP intitul Cycle de vie dune activit Android : Vie, pause et mort .
10
11
Chapitre 4
I Les prfrences
Android permet de mmoriser une information sous la forme dune paire (clef,valeur) et dy accder lors de
lexcution de lactivit ou du service. La valeur est de type primaire (boolen,flottant, entier, long ou chane de
caractres). Destine essentiellement pour sauvegarder les prfrences de lapplication, la mthode permet en fait de
stocker toute information pouvant se mettre sous la forme (clef,valeur).
I.1
Mthodes
I.2
Exercices
1. Dans quelle mthode de lactivit principale devrait se faire la sauvegarde des prfrences ?
2. Dans quelle mthode de lactivit principale devrait se faire une rcupration des paramtres utilisateurs ?
I.3
Travaux Pratiques
1. Dans la classe JeuxModel, crer la mthode grid2String() qui retourne la grille sous la forme dune
chane de 81 caractres numriques.
12
2. Dans la classe JeuxModel, crer la mthode string2grid(String r) qui affecte lattribut grid la
grille sous la forme dune chane de 81 caractres numriques passe en paramtres.
3. Modifier le code de lapplication pour que celle-ci sauvegarde ltat de la grille lorsquelle est est tue.
4. Modifier le code de lapplication pour que celle-ci recharge la dernire grille utilise lorsque le bouton continuer est appuy.
II
Les fichiers
En plus de supporter les classes usuelles Java dentre/sortie la bibliothque Android fournit les mthodes simplifies openFileInput et openFileOuput permettant de lire et dcrire aisment dans des fichiers. Lexemple
suivant rsume la situation :
try{
FileOutputStream fos = openFileOutput("tempfile.tmp", MODE_PRIVATE);
fos.write(new String("Hello World").getBytes());
fos.close();
String s = "";
FileInputStream fis = openFileInput("tempfile.tmp");
int b = fis.read();
while (b != -1){
s += new Character((char)b);
b = fis.read();
}
fis.close();
Toast.makeText (this,s,Toast.LENGTH_SHORT).show();
}catch(Exception e){
//
}
III
Le cloud
Cette partie est largement inspire des pages 214 224 du livre Android, guide de dveloppements dapplications
pour Smartphones et Tablettes de Sbastien PROCHON aux ditions ENI, juillet 2011.
Depuis la version 2.2 (API 8) Android permet de sauvegarder les donnes de lapplication sur un serveur de
Google. Pour un utilisateur ayant plusieurs appareils, la mme application a ses donnes cohrentes sur tous ces
appareils grce un processus de synchronisation en arrire plan avec les serveurs de Google.
Pour une utilisation en dehors de lmulateur les donnes sont associes au compte Google renseign dans lappareil. Lutilisateur doit avoir un compte Google identique sur tous ses appareils pour bnficier de ce service.
Le principe gnral est le suivant : lapplication communique avec le gestionnaire de sauvegarde des donnes
persistantes sur le serveur. Cest ce dernier qui se charge denvoyer les donnes dans le nuage et de les rcuprer au
lancement de lapplication, par exemple.
13
Dans le code prcdent, on a construit un agent de sauvegarde, qui hrite de la classe BackupAgentHelper.
la cration, on comence par dfinir quel(s) fichier(s) doit(doivent) tre synchroniss dans le cloud. Ici cest un fichier
de prfrnce. La dmarche est semblable pour un fichier quelconque. Ensuite, on renseigne que cest cet assistant
qui va tre utilis pour la synchronisation.
Une fois enregistr, le dveloppeur reoit une clef, insrer dans llment application du manifest comme suit :
<application>
...
<meta-data android:name="com.google.android.backup.api_key"
android:value="your_backup_service_key" />
</application>
Enfin, llment application doit dfinir lattribut android:backupAgent pour prciser quelle est la classe
qui assure la gestion de la persistance des donnes avec le serveur de Google.
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:backupAgent=".MonAgentDeSauvegarde">
Pour lui dire que les donnes ont chang, on insre le code suivant chaque fois que les donnes doivent tre
modifies.
this.backupManager.dataChanged();
Ici, successsivement
on active le service de sauvegarde (ligne 1 et 2)
puis on demande et on force lenregistrement (ligne 3)
enfin on supprime lapplication
14
Chapitre 5
II
Lapplication web
Cette partie nest pas dtaille car sort du contexte du cours.
15
<? php
i n c l u d e _ o n c e " c o n f . c l a s s . php " ;
c l a s s Message {
private $utilisateur ;
private $text ;
public function __construct ( $ u t i l i s a t e u r , $text ){
$ t h i s > u t i l i s a t e u r = $ u t i l i s a t e u r ;
$ t h i s > t e x t = $ t e x t ;
}
p u b l i c f i n a l s t a t i c f u n c t i o n cnx ( ) {
$ l i e n = m y s q l _ c o n n e c t ( Conf : : $ s e r v e r , Conf : : $ u s e r , Conf : : $passwd ) ;
$db = m y s q l _ s e l e c t _ d b ( Conf : : $ b a s e , $ l i e n ) ;
}
public function insere (){
Message : : cnx ( ) ;
$ q u e r y = " INSERT INTO m e s s a g e s ( i d , u t i l i s a t e u r , t e x t , d a t e )
VALUES (NULL, $ t h i s > u t i l i s a t e u r , $ t h i s > t e x t , CURRENT_TIMESTAMP) " ;
$ r e s u l t = mysql_query ( $query ) ;
mysql_free_result ( $result );
}
public final s t a t i c function recupere_cinq_derniers (){
Message : : cnx ( ) ;
$ q u e r y = "SELECT u t i l i s a t e u r , t e x t , d a t e FROM m e s s a g e s ORDER by d a t e DESC
LIMIT 5 " ;
$ r e s u l t = mysql_query ( $query ) ;
e c h o " <? xml v e r s i o n = \ " 1 . 0 \ " e n c o d i n g = \ "UTF8\ " ? > \ n " ;
w h i l e ( $row = m y s q l _ f e t c h _ a s s o c ( $ r e s u l t ) ) {
e c h o " <msg > \ n " ;
e c h o " < u t i l i s a t e u r > " . $row [ u t i l i s a t e u r ] . " </ u t i l i s a t e u r > \ n " ;
e c h o " < t e x t > " . $row [ t e x t ] . " </ t e x t > \ n " ;
e c h o " < d a t e > " . $row [ d a t e ] . " </ d a t e > \ n " ;
e c h o " </ msg > \ n " ;
}
mysql_free_result ( $result );
}
}
?>
et le fichier conf.class.php
<? php
c l a s s Conf {
public s t a t i c
public s t a t i c
public s t a t i c
public s t a t i c
}
?>
$ s e r v e r ="_" ;
$user ="_" ;
$passwd = " _ " ;
$base=" messagerieAndroid " ;
et le fichier recupemsg.php
<? php
i n c l u d e _ o n c e " m e s s a g e . c l a s s . php " ;
Message : : r e c u p e r e _ c i n q _ d e r n i e r s ( ) ;
?>
16
III
Lapplication Android
Les identifiants des lments TabHost, TabWidget et FrameLayout qui sont @android:id/tabhost,
@android:id/tabs et "@android:id/tabcontent respectivement ne doivent pas tre modifis.
Lactivit principale de lapplication est reprsente par des onglets, ceci se ralise en tendant la classe TabActivity.
De plus, comme elle coute le bouton de validation, elle implante linterface OnClickListener.
Comme dans toute activit, la mthode onCreate vise construire la vue lie lactivit. La vue avec onglets
est dfinie par un objet de type TabHost instanci directement par getTabHost() qui le lie llment du mme
nom identifi par @android:id/tabhost".
TabHost mTabHost = g e t T a b H o s t ( ) ;
TabSpec TabGSpec = mTabHost . newTabSpec ( " t a b _ m e s s a g e " ) ;
TabGSpec . s e t I n d i c a t o r ( "N . Message " , g e t R e s o u r c e s ( ) . g e t D r a w a b l e ( a n d r o i d . R . d r a w a b l e . i c _ m e n u _ a d d ) ) ;
17
TabGSpec . s e t C o n t e n t ( R . i d . t a b l i n e a r ) ;
TabSpec TabDSpec = mTabHost . newTabSpec ( " t a b _ c o n t r i b s " ) ;
TabDSpec . s e t I n d i c a t o r ( " C o n t r i b s " , g e t R e s o u r c e s ( ) . g e t D r a w a b l e ( a n d r o i d . R . d r a w a b l e . i c _ m e n u _ v i e w ) ) ;
TabDSpec . s e t C o n t e n t ( R . i d . w e b t x t ) ;
mTabHost . addTab ( TabGSpec ) ;
mTabHost . addTab ( TabDSpec ) ;
B u t t o n b o u t o n _ e n v o y e r = ( B u t t o n ) f i n d V i e w B y I d (R . i d . b t n ) ;
bouton_envoyer . setOnClickListener ( t h i s ) ;
la classe RecupTimerTask qui tend TimerTask. Sa mthode run() appele toutes les 10s dans lexemple invoque la mthode msg_maj() de la classe RecupService
dans la classe RecupService, la mthode msg_maj()
1. interroge la page recupemsg.php via un client DefaultHttpClient comme avant ;
18
Exercice
Complter le dveloppement des deux classes dcrites ci-dessus et vrifier dans le dbugueur que les intentions
sont envoyes par le service.
Ceci se fait dans la mthode onResume de la classe Messagerie. Dire pourquoi. Enfin le la classe MsgRecepteur
qui tend BroadcastReceiver doit dfinir la mthode onReceive(Context arg0, Intent arg1) :
celle-ci invoque uniquement la mthode msg_affichage_maj ( dfinir) de la classe Messagerie qui remplit
le texte de la textview.
19