TP #1 : Initiation au développement sur Android

UE NT (Nouvelles Technologies)
Département Informatique de l'Université Claude-Bernard - Lyon 1
TP #1 : Initiation au développement sur Android
Auteurs : Jean-Patrick Gelas (UCBL Lyon 1)
Publique : M2 SIR, M2 SIR app (réseaux)
L'environnement de développement Eclipse et son plug-in ADT sont pré-installés sur les
postes des salles TPR2 et TPR3. Veillez a sélectionner le profil de TP nommé
TP_ANDROID (accessible via l'onglet « Les TP »). Pour Lancer l'environnement, à partir
d'un terminal tapez la commande suivante :
./adt-bundle-linux-x86-20131030/eclipse/eclipse
Ce premier TP vous propose de refaire par vous même en partie la démonstration qui
vous a été faite en cours. Vous pouvez vous aider du tutoriel officiel disponible sur le site
développeur d'Android : http://developer.android.com/training/basics/firstapp
Hommage à K&R (Hello World)
Créer un nouveau projet Android
Click : New Android Application project
Application name : Bonjour
Package name : fr.univlyon1.nautibus.bonjour
Minimum required SDK : API 14 (Ice Cream Sandwich)
Next… [Blank activity] ... next... Finish
Créer un AVD (Android Virtual Device) :
Lancer le AVD Manager et créer un nouveau device.
(Sélectionner Use host GPU pour accélérer l'affichage).
Modifier la chaine de caractères « Hello world » afficher à l'écran par « Bonjour
monde » :
Editez res/values/string.xml et remplacer Hello world par Bonjour le monde ;)
Emettre message de Log :
On utilise logcat. Placez la ligne suivante dans la méthode onCreate()
Log.i("myTAG", "onCreate est lancé");
Astuce : Pour importer un package manquant : Shift+Cmd+O
Interface graphique simple
Adaptons à présent l'interface graphique au besoins de notre application :
Activity_main.xml (à la souris)
Ajouter un Textedit et un Button
Le texte (Send du bouton) est "hardcodé" d'où la présence d'un Warning.
Il peut être mis dans res/value/string.xml
android:text="@string/button1"
<string name="button1" > Envoie</string >
Astuce : clic-droit pour ajouter un "hint" à TextEdit (ex : "Votre nom ?")
1
UE NT (Nouvelles Technologies)
Département Informatique de l'Université Claude-Bernard - Lyon 1
Ajouter une activité
Dans activity_main.xml (Button), on associe une méthode à appeler.
android:onClick="sendMessage"
Ajouter cette méthode dans MainActivity.java
public void sendMessage(View view) {
Log.i("Bonjour", "Clic !");
}
Remarque : La méthode doit être public, retourner un void, et avoir un View comme paramètre (le
bouton ici).
Un Intent (ou intention) est un objet qui permet de lier à l'exécution deux composants (par
exemple deux activités). Il permet de représenter ce qu'une application à l'intention de
faire. La plupart du temps il est utilisé pour lancer une autre activité.
Donc à l'intérieur de sendMessage() définissez une Intention qui démarre l'activité qu'on
appellera DisplayMessageActivity.java
Intent intent = new Intent(this, DisplayMessageActivity.class);
Il prend en paramètre un contexte (this, celui de l'activité courante), et le nom de la classe
a qui l'intent va être délivré (donc l'activité qui doit être démarrée).
Pour démarrer l'activité on passe l'intent à la méthode startActivity.
startActivity(intent);
Création de la seconde activité : New->Other->Android Activity, Blank activity,
Activity Name: DisplayMessageActivity
Hierarchial Parent: fr.univlyon1.nautibus.bonjour.MainActivity
Remarque : Vous pouvez supprimer les méthodes onCreateOptionMenus() et
onOptionsItemSelected().
Faire passer un message d'une activité à l'autre
(ex: le nom saisie par l'utilisateur dans le champ TextEdit)
Un Intent peut non seulement démarrer une autre activité mais également lui transmettre
des données. On appel ça des Extras.
On définit d'abord un identifiant de message (constante publique à définir tout en haut de
la classe MainActivity):
public final static String EXTRA_MESSAGE ="fr.univlyon1.nautibus.bonjour.MESSAGE";
Dans la méthode sendMessage() ajouter putExtra
2
UE NT (Nouvelles Technologies)
Département Informatique de l'Université Claude-Bernard - Lyon 1
Intent intent=...
String message = "I have a dream";
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(…
Comment récupérer le message ou recevoir l'intent dans l'activité appelée ? (dans
onCreate() de la seconde activité (DisplayMessage))
Intent intent = getIntent();
String message =
intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
Log.i("Bonjour", "Message reçu : " + message);
A présent récupérons ce qui a été vraiment saisie par l'utilisateur dans le champs TextEdit
(dans MainActivity.sendMessage… ajouter) :
EditText editText = (EditText) findViewById(R.id.editText1);
String message = editText.getText().toString();
Et affichez dans la seconde activité (DisplayMessage) le message dans un TextView
Soit en utilisant le "Helloworld" déjà disponible :
ajouter un identifiant dans le layout xml : android:id="@+id/tv_message"
et ajouter dans onCreate de la seconde activité
TextView tv = (TextView) findViewById(R.id.tv_message);
tv.setText("Bonjour " + message);
Soit en créant le TextView directement dans le code source java :
TextView tv = new TextView(this);
tv.setTextSize(40);
tv.setText("Bonjour " + message);
setContentView(tv); // pensez commenter le setContentView intial
Si il y a le temps...
Modifier le menu de la MainActivity (Settings)
Afficher "About" au lieu de "Settings" (strings.xml)
cf. res/menu/main.xml
Puis ajouter la méthode de callback suivante :
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Log.i("Bonjour", "About menu has been selected !");
Toast.makeText(getBaseContext(), "Bonjour by VotreNom (c) 2014",
Toast.LENGTH_SHORT).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
3