TP #1 : Initiation au développement sur Android

TP #1 : Initiation au développement sur Android

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 : 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.

(Selectionner Use host GPU pour accélerer 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 > 1

UE NT (Nouvelles Technologies)

Département Informatique de l'Université Claude-Bernard - Lyon 1

Astuce : clic-droit pour ajouter un "hint" à TextEdit (ex : "Votre nom ?")

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().

Question : Comment 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";2 UE NT (Nouvelles Technologies)

Département Informatique de l'Université Claude-Bernard - Lyon 1

Dans la méthode sendMessage() ajouter putExtra Intent intent=...

String message = "I have a dream";

intent.putExtra(EXTRA_MESSAGE, message);

startActivity(...

Question : 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 "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