01.11.2014 Views

correction - IA

correction - IA

correction - IA

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!