Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Université Pierre et Marie Curie<br />
2012-2013<br />
Réseaux mobiles<br />
Travaux Pratiques<br />
Objectif(s)<br />
TP n o 1<br />
✭ Introduction à la programmation Android<br />
✭ Définir une activité<br />
✭ Utiliser des élements de présentation graphiques<br />
✭ Réagir à un clic<br />
1 Exercices corrigés (2h30)<br />
Exercice 1 – Configuration (30 min)<br />
1. Télécharger la dernière version d’Eclipse<br />
(a) Aller à l’adresse suivante pour télécharger Eclipse Classic http://www.eclipse.org/downloads/.<br />
Remarque : pour savoir si votre OS est en 32 ou 64 bits, tapez uname -a.Si ça se termine par amd64 c’est en<br />
64 bits, par 486 ou 686 en 32 bits.<br />
(b) Décompresser le fichier téléchargé : tar xzf eclipse-java-juno-SR1-linux-gtk-x86 64.tar.gz.<br />
(c) Lancer la commande eclipse contenu dans le dossier décompressé.<br />
2. Configurer le proxy d’Eclipse (seulement sur le réseau de polytech)<br />
(a) Lancez Eclipse et cliquez sur Preferences du Menu déroulant Window.<br />
(b) Dans General->Network Connections, vérifiez que Active Provider est sur Manual et éditez les<br />
Proxy Entries HTTP et HTTPS avec les caractéristiques suivantes :<br />
Host proxyweb.upmc.fr<br />
Port 3128<br />
3. Installer le SDK Android<br />
(a) Cliquez sur Install New Software du menu déroulant Help.<br />
(b) Cliquez sur le bouton Add en haut à droite.<br />
(c) Insérez les caractéristiques suivantes :<br />
Name<br />
Location<br />
ADT Plugin<br />
https://dl-ssl.google.com/android/eclipse/<br />
(d) Cochez Developer Tools et cliquez sur next pour installez le SDK Android en suivant les instructions.
Reseaux mobiles - 2012/2013 - TP n o 1<br />
Exercice 2 – Hello World (30 min)<br />
En suivant le tutorial de http://developer.android.com/training/basics/firstapp/creating-project.html, créer votre<br />
première application qui affiche simplement un message de bienvenue ”Hello World” et exécutez-la dans un émulateur<br />
(ou sur votre dispositif mobile).<br />
• Entrez le nom que vous désirez dans la case ApplicationName<br />
• Sélectionnez Android 2.2 pour le Build SDK et le Minimum required SDK<br />
• Le reste est à configurer à votre convenance.<br />
• Le démarrage d’un émulateur peut-être long, faites preuve de patience et ne refermez pas l’émulateur : il<br />
suffit de redémarrer l’application via Eclipse pour qu’elle se recharge dans l’émulateur.<br />
1. A quoi sert le fichier AndroidManifest.xml ?<br />
Solution:<br />
A décrire les composants de l’application, en particulier la classe principale (ici MainActivity.<br />
2. Quelle est la classe java principale de votre application et de quelle classe hérite-t-elle ? Trouvez sur le site<br />
de http://developer.android.com/ la documentation de cette classe mère. Quelles est la méthode principale à<br />
implémenter ?<br />
Solution:<br />
La classe principale de l’application est src->...->MainActivity.java, qui hérite de Activity.<br />
La documentation est ici : http:// developer.android.com/reference/android/app/Activity.html<br />
La méthode principale est onCreate(Bundle).<br />
3. Dans quel fichier est décrit l’apparence graphique de votre activité principale et quel est sont type?<br />
Solution:<br />
Dans le fichier XML res->layout->activity main.xml<br />
4. A quoi sert le fichier string.xml contenu dans le dossier values ?<br />
Solution:<br />
A définir toutes les constantes utilisées par l’application : chaînes de caractères string, couleurs color,<br />
dimensions dimen, etc.<br />
Exercice 3 – My First App (30 min)<br />
1. En suivant le tutorial de http://developer.android.com/training/basics/firstapp/building-ui.html, créer<br />
l’application illustrée figure 1 :<br />
Figure 1: My First App<br />
• Langue du clavier : pour changer la langue de saisie, presser longuement le champ texte. Dans le menu<br />
qui apparait, choisissez Input Method puis Android Keyboard.<br />
c○2012/2013 Polytech’Paris page 2 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
• Debug : pour visualiser l’affichage de la méthode System.out.println, ouvrir la perspective DDMS<br />
(Window > Open Perspective > Other > DDMS et cliquer sur l’onglet LogCat.<br />
2. On souhaite modifier l’application pour que le bouton Send réagisse au clic en affichant le message dans une<br />
fenêtre popup appelée Toast (http://developer.android.com/guide/topics/ui/notifiers/toasts.html). Pour cela,<br />
il faut :<br />
(a) Ajouter l’attribut onClick au bouton dans le fichier activity main.xml et lui associer le nom<br />
de la méthode qui sera appelée, par exemple displayMessage qui n’est pas encore définie :<br />
android:onClick="displayMessage"<br />
(b) Définir la méthode displayMessage suivante dans la classe MainActivity et presser Ctrl+Shift+O<br />
pour importer les classes manquantes :<br />
c○2012/2013 Polytech’Paris page 3 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
/**<br />
* Called when the user clicks the send button<br />
*/<br />
public void displayMessage(View view){<br />
Context context = getApplicationContext();<br />
EditText editText = (EditText) findViewById(R.id.edit_message);<br />
String message = editText.getText().toString();<br />
CharSequence text = "Votre message est :\n" + message;<br />
int duration = Toast.LENGTH_SHORT;<br />
Toast toast = Toast.makeText(context, text, duration);<br />
toast.show();<br />
}<br />
3. Que fait la méthode findViewById et quel paramètre attend-elle ? A quoi correspond la classe java R.java<br />
contenue dans le dossier gen?<br />
Solution:<br />
cf. http://developer.android.com/reference/android/app/Activity.html#findViewById(int)<br />
La méthode retourne la View identifiée par l’attribut id. L’identifiant id contenu dans le document XML<br />
activity main.xml a été compilé dans la classe java R. En fait, la classe R.java a généré des classes<br />
internes correspondant aux color, dimen, id, layout, string, etc. à partir du document source XML<br />
activity main.xml. Chaque classe interne de R, par exemple R.id contient autant de champs statiques<br />
que d’attributs correspondants dans le document XML. Par exemple, l’identifiant de l’EditText est le champ<br />
R.id.edit message.<br />
Exercice 4 – Personnalisation (30 min)<br />
Figure 2: Personnalisation de MyFirstApp<br />
Les constantes (chaînes de caractères, couleur, dimension, ...) sont définies dans le fichier string.xml contenu<br />
dans le dossier values et ensuite associées aux éléments graphiques dans le fichier activity main.xml. Remarque<br />
: pour afficher la liste des valeurs possibles avec Eclipse, positionner le curseur à l’endroit désiré et faites Ctrl+espace.<br />
Modifier les éléments suivants de votre première application pour obtenir le résultat de la figure 2:<br />
• Le message par défaut de EditText devient ”Entrez un message”<br />
• Les éléments sont placés verticalement dans le layout.<br />
• Le message est positionné en haut de la vue (attribut android:gravity).<br />
• Pour associer une couleur avec un élément graphique, il faut d’abord définir la couleur bleu (élément color)<br />
dans string.xml et ensuite utiliser l’attribut android:background. Modifier le fond du layout (attribut<br />
android:background) pour qu’il soit bleu (#00FFFF).<br />
• Modifier la vue EditTest pour que le message soit placé en haut, avec une marge de 20px.<br />
• Pour définir une marge, il faut d’abord créer une dimension dans string.xml. Modifier la vue Button pour<br />
que le bouton ait une marge (top) de 20px.<br />
c○2012/2013 Polytech’Paris page 4 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
• Centrer le bouton (attribut android:layout gravity).<br />
Solution:<br />
Le fichier activity main.xml est :<br />
<br />
<br />
<br />
<br />
Le fichier string.xml est :<br />
<br />
My First App<br />
Salut tout le monde<br />
Settings<br />
My First App<br />
Entrez un message<br />
Envoyer<br />
#00FFFF<br />
20px<br />
<br />
c○2012/2013 Polytech’Paris page 5 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
Exercice 5 – Mise en pause et reprise d’application<br />
Consulter http://developer.android.com/training/basics/activity-lifecycle/pausing.html et répondez aux questions<br />
suivantes :<br />
1. Quels sont les états possibles d’une application android ?<br />
Solution:<br />
• Created : l’application vient d’être créée<br />
• Started : l’application est active et visible.<br />
• Resumed : en cours d’exécution (Resumed, encore appelée Running<br />
• Paused : en pause (mais toujours visible)<br />
• Stopped : arrêtée (invisible)<br />
2. Quelles sont les méthodes principales d’une activité android ?<br />
Solution:<br />
• onCreate() : initialisation de l’activité. Appelée une seule fois à la création.<br />
• onStart() : démarrage ou redémarrage de l’activité. Appelée après la création puis autant de fois que<br />
l’activité est mise en pause puis redémarrée.<br />
• onPause() : mise en pause de l’activité. L’activité est toujours visible mais plus active.<br />
• onStop() : l’activité est arrêtée et n’est plus visible (mais peut reprendre)<br />
• onDestroy(): l’activité est terminée.<br />
3. Reprendre l’application MyFirstApp et implémenter toutes les méthodes précédentes en affichant simplement<br />
un message indiquant quelle méthode a été appelée à l’aide d’un Toast.<br />
(a) Démarrer votre application. Quelles sont les méthodes successivement appelées ?<br />
Solution:<br />
D’abord onCreate() puis onStart() et enfin onResume().<br />
(b) Pour cacher votre application, cliquer sur l’icone de l’accueil. Quelles méthodes sont appelées ?<br />
Solution:<br />
D’abord onPause() puis onStop().<br />
(c) Est-il possible de détruire manuellement l’application ?<br />
Solution:<br />
Non, c’est android lui-même qui se charge du cycle de vie de l’application pour optimiser les ressources<br />
(le chargement en mémoire est coûteux donc l’application est stoppée et non détruite jusqu’à ce que le<br />
système ait besoin de récupérer des ressources comme la mémoire).<br />
(d) Modifier un peu votre application, par exemple en changeant les messages Toast des méthodes onXXX().<br />
Que se passe-t-il si on démarre une nouvelle instance de votre application via Eclipse ?<br />
Solution:<br />
Une nouvelle application démarre à la place de l’ancienne. Il est inutile de refermer l’émulateur.<br />
2 Exercices à rendre (1h30)<br />
Exercice 6 – Envoi de SMS<br />
Nous allons développer une petite application d’envoi de SMS qui a l’apparence de la figure 3.<br />
c○2012/2013 Polytech’Paris page 6 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
Figure 3: Application android d’envoi de SMS<br />
1. Créer un nouveau Projet intitulé TP1 nom1 nom2, où nom1 et nom2 sont les noms du binôme, puis modifier le<br />
fichier activity main.xml et string.xml pour créer une activité ayant l’apparence de la figure 3.<br />
c○2012/2013 Polytech’Paris page 7 sur 11
Solution:<br />
Le fichier activity main.xml :<br />
Reseaux mobiles - 2012/2013 - TP n o 1<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Le fichier string.xml :<br />
<br />
Envoi SMS<br />
Settings<br />
Envoi SMS<br />
Numero<br />
Entrez le numero<br />
Message<br />
Tapez le message<br />
Envoyer<br />
#001122<br />
#CC6600<br />
<br />
c○2012/2013 Polytech’Paris page 8 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
2. Pour envoyer un SMS contenant le message message à un numéro numero, il suffit d’utiliser la classe SMS-<br />
Manager de la façon suivante :<br />
SmsManager.getDefault().sendTextMessage(numero, null, message, null, null);<br />
Ajouter une méthode sendSMS qui réagit à un clic sur le bouton Envoyer en envoyant le message par SMS au<br />
destinataire. La méthode vérifiera que le numéro contient au moins 4 chiffres et que le message n’est pas vide.<br />
Solution:<br />
Dans le fichier activity main.xml, on ajoute l’attribut onClick au bouton Envoyer:<br />
<br />
Dans le fichier MainActivity.java, on ajoute la méthode public void sendSMS(View view) :<br />
/**<br />
* Called when the user clicks the send button<br />
*/<br />
public void sendSMS(View view){<br />
// Recupere les editText grace a leurs ids<br />
EditText et_numero =(EditText)findViewById(R.id.numero);<br />
EditText et_message = (EditText)findViewById(R.id.message);<br />
String numero = et_numero.getText().toString();<br />
String message = et_message.getText().toString();<br />
if(numero.length()>= 4 && message.length() > 0){<br />
//Grace à l’objet de gestion de SMS (SmsManager)<br />
//que l’on recupere grace a la methode static getDefault()<br />
//on envoit le SMS a l’aide de la methode sendTextMessage<br />
SmsManager.getDefault().sendTextMessage(numero, null, message, null,<br />
null);<br />
//On efface les deux EditText<br />
et_numero.setText("");<br />
et_message.setText("");<br />
}else{<br />
//On affiche un petit message d’erreur dans un Toast<br />
Toast.makeText(this, "Enter le numero et/ou le message", Toast.<br />
LENGTH_SHORT).show();<br />
}<br />
}<br />
3. Pour tester votre application avec un émulateur, il vous définir un deuxième émulateur et démarrer l’application<br />
sur le 1er émulateur. Pour envoyer un message d’un émulateur à un autre, il vous suffit de composer comme<br />
numéro les 4 chiffres qui se trouvent sur la fenêtre de l’émulateur comme dans la figure 4.<br />
4. Modifier votre application pour que l’utilisateur puisse entrer plusieurs numéros séparés par un point virgule (;).<br />
Le message devra être envoyé à tous les destinataires. Tester votre application en utilisant 3 émulateurs et un<br />
utilisateur qui envoi un message aux 2 autres. ATTENTION : votre clavier doit être en français sinon vous<br />
risquez des problèmes d’encodage de certains caractères.<br />
c○2012/2013 Polytech’Paris page 9 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
Figure 4: Application android d’envoi de SMS<br />
Solution:<br />
Dans MainActivity.java :<br />
/**<br />
* Called when the user clicks the send button<br />
*/<br />
public void sendSMS(View view){<br />
// Recuperer les editText grace a leurs ids<br />
EditText et_numero =(EditText)findViewById(R.id.numero);<br />
EditText et_message = (EditText)findViewById(R.id.message);<br />
}<br />
String message = et_message.getText().toString();<br />
if(message.length() > 0){<br />
String s = et_numero.getText().toString();<br />
String[] liste_numeros = s.split(";");<br />
System.out.println("nombre de destinataires =" + liste_numeros.<br />
length);<br />
for(int i=0; i= 0){<br />
//Grace à l’objet de gestion de SMS (SmsManager)<br />
//On envoit le SMS Ã l’aide de la methode sendTextMessage<br />
SmsManager.getDefault().sendTextMessage(num, null, message,<br />
null, null);<br />
//On efface les deux EditText<br />
}else{<br />
//On affiche un petit message d’erreur dans un Toast<br />
Toast.makeText(this, "Le numà c○ro "+num+" n’est pas correct.<br />
", Toast.LENGTH_SHORT).show();<br />
et_numero.setText("");<br />
System.exit(-1);<br />
}<br />
}<br />
et_numero.setText("");<br />
et_message.setText("");<br />
}else{<br />
Toast.makeText(this.getApplicationContext(), "Entrez un message non<br />
vide.", Toast.LENGTH_SHORT).show();<br />
et_message.setText("");<br />
}<br />
c○2012/2013 Polytech’Paris page 10 sur 11
Reseaux mobiles - 2012/2013 - TP n o 1<br />
5. Les applications android sont packagée dans des archives .apk. Pour exporter un projet, clic droit sur le nom<br />
du projet et clic sur Android Tools -> Export Unsigned Application Package. Pour réellement<br />
publier un projet sur Play Store par exemple, il faudrait d’abord générer une clé (keystore), ce que nous<br />
ne ferons pas en TP.<br />
Pour soumettre votre TP, exporter votre projet sous le nom TP1 nom1 nom2.apk et envoyez-le par mail à votre<br />
chargé de TP, en précisant l’objet suivant : [ELI5-resmob] TP1 nom1 nom2<br />
c○2012/2013 Polytech’Paris page 11 sur 11