Vous êtes sur la page 1sur 8

Université Pierre et Marie Curie

2012-2013

Réseaux mobiles
Travaux Pratiques

TP no 2

Objectif(s)

M Présenter le Menu

M Présenter les intents et la fonction StartActivityForResult

M Echange de variables entre différentes Activity

M Utiliser un programme de liaison TCP/IP en Android

1 Exercices corrigés (2h)

Exercice 1 – Le Menu et les Listener (30 min)

Ce premier exercice comprend le temps d’initialisation de votre environnement de développement. En effet, cette
fois ci nous utiliserons soit vos téléphone Android, soit les tablettes mises à votre disposition. Ceci implique de
déterminer la taille de l’écran sur laquelle vous allez travailler, ainsi que la version d’Android maximum, que vous
allez utiliser.
Dans ce Tp, il ne vous est pas demandé de reproduire à la lettre les impressions écran présentés mais de s’en inspirés
pour avoir toutes les fonctionnalités demandées.
En s’aidant du tutorial suivant : http://developer.android.com/guide/topics/ui/menus.html, créer une application
avec une Activity dans lequel un TextView invite à cliquez sur Menu. Cette Activity contiendra un menu avec deux
item : Wifi Parameters et Server Parameters : 1
Reseaux mobiles - 2012/2013 - TP no 2

Figure 1: Menu basique

Solution:

Dans MenuPrincipal.java (Main Activity) :


@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);

return super.onCreateOptionsMenu(menu);
}
Dans menu.xml :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/wifiparam"
android:title="Wifi Parameters" />
<item android:id="@+id/serverparam"
android:title="Server Parameters" />
</menu>

Exercice 2 – Menu, Intent et StartActivityForResult (45 min)


En prenant connaissance du tutorial précédent et des tutoriaux suivant :
http://developer.android.com/training/basics/intents/result.html et http://developer.android.com/guide/components/intents-
filters.html,lancer une Activity pour chacune des options du Menu.
Avec l’option ”Wifi Parameters”, lancer les paramètres wifi du téléphone(Settings.ACTION WIFI SETTINGS) : 2.
Lorsque l’on revient sur l’Activity principal, celle-ci doit afficher l’état du wifi à l’aide d’un Toast.
Avec l’option ”Server Parameters”, lancer une Activity comme celle-ci : 3 et faire en sorte de revenir à l’Activity
principale lorsque vous cliquez sur le bouton Save Parameters.

c
2012/2013 Polytech’Paris page 2 sur 8
Reseaux mobiles - 2012/2013 - TP no 2

Figure 2: Paramétrage wifi

Figure 3: Paramétrage du server

Solution:

public boolean onOptionsItemSelected(MenuItem item) {


switch(item.getItemId()){
case R.id.wifiparam:
Intent intent2 = new Intent(Settings.ACTION_WIFI_SETTINGS);
startActivityForResult(intent2, 100);
break;
case R.id.serverparam:
if(isWifiActif()){
Intent intent1 = new Intent(lecontext,CreateConnection.class);
startActivityForResult(intent1,150);
}
else Toast.makeText(lecontext, "Wifi Disactived", Toast.LENGTH_SHORT).
show();
break;
}
c
2012/2013 Polytech’Paris
return page 3 sur 8
super.onOptionsItemSelected(item);
}
Reseaux mobiles - 2012/2013 - TP no 2

Exercice 3 – Echange de variables entre Activity (20 min)

A l’aide des tutoriaux précédent :

Reprenez votre précédente application, changer l’activity de paramétrage du server. Lorsque l’utilisateur clique sur le
boutton ”Save Parameters”, vérifiez que celui-ci a bien rentré l’adresse Ip et le Port de la bonne manière et transmettre
ces données à l’Activité principale en retournant sur celle-ci.

c
2012/2013 Polytech’Paris page 4 sur 8
Reseaux mobiles - 2012/2013 - TP no 2

Solution:
Dans CreateConnection.java :
public class CreateConnection extends Activity {
Context contextCreate;

@Override
public void onCreate(Bundle savedInstanceState) {
Log.i("CreateConnection","Activity cree");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_connection);
Log.i("CreateConnection","Activity ok");
contextCreate = this;
}

public void onClickSend(View view){

String adressIp;
String portText;
EditText editIp = (EditText) findViewById(R.id.EditIp);
EditText editPort = (EditText) findViewById(R.id.EditPort);

adressIp = editIp.getText().toString();
portText = editPort.getText().toString();
String[] parseIp = adressIp.split("\\.");

Log.i("CreateConnection", adressIp);
Log.i("CreateConnection", Integer.toString(parseIp.length));

if(portText.length()==0 || portText.length()>4 || parseIp.length!=4){


Toast.makeText(contextCreate, "Information Error", Toast.LENGTH_SHORT).
show();
}
else{
Bundle bundle = new Bundle();
bundle.putString("Ip", adressIp);
bundle.putString("Port", portText);

Intent mIntent = new Intent();


mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
}

}
Dans MenuPrincipal.java (Main Activity) :
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==100){
Toast.makeText(this, isWifiActif()?"Wifi Actived":"Wifi Disactived",
Toast.LENGTH_SHORT).show();
super.onActivityResult(requestCode, resultCode, data);
}
else if(requestCode==150){
if (resultCode == Activity.RESULT_OK) {
Ipadress = data.getStringExtra("Ip");
PortNumber = data.getStringExtra("Port");
Log.i("MenuPrincipal", Ipadress);
Log.i("MenuPrincipal", PortNumber);
}
super.onActivityResult(requestCode, resultCode, data);
}
c
2012/2013 Polytech’Paris page 5 sur 8
else if(requestCode==160){
if (resultCode == 100){
Toast.makeText(this, "Server not ok", Toast.LENGTH_SHORT).show();
Reseaux mobiles - 2012/2013 - TP no 2

Exercice 4 – ListView (25 min)


En s’aidant potentielement de ce tutorial :http://www.tutomobile.fr/personnaliser-une-listview-tutoriel-android-
n07/04/07/2010/ :

1. Créez une application dans laquelle vous insérez une ListView, un EditText et un Bouton.

2. Chacun des éléments de l’edit Text devra contenir un TextView.

3. Lorsque l’utilisateur clique sur le bouton, le texte entré dans l’EditText est ajouté à la ListView.

Solution:

Voir StartGame.java de l’exercice suivant.

2 Exercices à rendre (2h)

Exercice 5 – Guess Number


Nous allons développer une application qui utilise le programme Java de l’année dernière sur les sockets TCP/IP.
Vous trouverez le Tp de l’année dérnière à l’adresse suivante :
Ensuite :

1. Prenez le projet des exercices du début.

2. Ajoutrer un bouton start game dans l’activité principale.

3. Lorsque l’utilisateur clique sur le bouton, l’application vérifie que le wifi est activé (fonction : Set-
tings.System.getInt(getContentResolver(),Settings.Secure.WIFI ON)) (ATTENTION en machine virtuelle le wifi
ne s’active pas mais une connection local est possible) et que les paramètres du server on bien été entrés.

4. Ouvrir une activité qui contient une listView qui affichera les messages soit du server, soit du client, un editText
et un bouton. Ceci permettrons à l’utilisateur de discuter avec le server.

5. Ensuite utilisez le code du TCPClient du TP de l’année dérnière et modifiez le pour que l’on puisse se connecter
au Server lancé sur l’ordinateur.

6. Si celui-ci n’est pas disponible, revenir au menu principal.

7. Voici ce que cela pourrait donner 4 et 5 :

c
2012/2013 Polytech’Paris page 6 sur 8
Reseaux mobiles - 2012/2013 - TP no 2

Figure 4: Main activity

Solution:
Dans MenuPrincipal.java (Main Activity):

public class MenuPrincipal extends Activity {

Button boutonCreate;
Context lecontext;
String Ipadress;
String PortNumber;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_principal);
lecontext= this;
boutonCreate = (Button) findViewById(R.id.ButtonCreate);
Ipadress = "problem";
PortNumber = "problem";
//Ipadress = "192.168.0.1";
//PortNumber = "8080";

//listener bouton create connection et appel de la class StartGame


boutonCreate.setOnClickListener (new Button.OnClickListener(){
public void onClick(View view) {
if(!isWifiActif()){
Toast.makeText(lecontext, "Wifi Disactived", Toast.
LENGTH_SHORT).show();
}
else if (!haveIpAdress()){
Toast.makeText(lecontext, "You don’t have Ip Adress", Toast
.LENGTH_SHORT).show();
}
else if (Ipadress == "problem"){
Toast.makeText(lecontext, "Configuration Problem", Toast.
LENGTH_SHORT).show();
}
else {
Bundle bundle1 = new Bundle();
bundle1.putString("param1", Ipadress);
bundle1.putString("param2", PortNumber);
c
2012/2013 Polytech’Paris page 7 sur 8
Intent intent1 = new Intent(lecontext,StartGame.class);
intent1.putExtras(bundle1);
Reseaux mobiles - 2012/2013 - TP no 2

Figure 5: IHM de discution avec le server

Pour soumettre votre TP, archivez le dossier du Projet contenu dans le workspace et envoyez-le par mail à votre
chargé de TP, en précisant l’objet suivant : [ELI5-resmob] TP1 nom1 nom2

c
2012/2013 Polytech’Paris page 8 sur 8