5 nov. 2009

Gestion Intents


Bonjour,

Nous allons commencer notre premier tutorial !! On pourrait dire "Enfin !!"...ce n’est pas trop tôt-;-)

Dans ce tutorial, nous allons voir un principe fondamental pour la suite, la communication entre plusieurs « Activity » via les « Intents ».

Tutorial 1 :
Ajout d’une nouvelle Activity
Gestion d’un événement (button)
Passage de paramètre entre deux Activity
Animation d’un élément graphique




Définition Intent : (http://developer.android.com/reference/android/content/Intent.html)
Les Intents sont des objets permettant de faire passer des messages contenant de l’information entre composants principaux. La notion d’Intent peut être vue comme une demande de démarrage d’un autre composant, d’une action à effectuer. La raison d’être des Intents provient du modèle de sécurité d’Android. Chaque application est en effet sandboxée. Cela veut dire qu’une application A ne peut accéder aux données d’une application B. Grâce aux Intents, les applications ont la possibilité de fournir leurs services ou données si elles le souhaitent.

Pré-requis : nous devons créer un nouveau projet, mais vous pouvez télécharger les sources de ce projet à l’adresse suivante : http://tutobarcode.svn.sourceforge.net/viewvc/tutobarcode/

1 - Ajout d’une nouvelle « Activity »

Nous avons dans notre projet une « Activity » de base « main.java », nous allons créer une nouvelle « Activity » « About.java », le but est de switcher entre les deux « Activity ».

Sur cette nouvelle l’« Activity », nous déclarons un nouveau Layout « about.xml ». Attention, en ce qui concerne les layouts vous devez respecter la « case » suivante, tous doit être en minuscule.

Sur ce Layout, nous allons placer les éléments suivant :
- Un fond d’écran
- Un texte de bienvenu
- Un texte nous permettant de récupérer le paramètre envoyé de l’Activity « main »


Code Java :
public class About extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);}

Code xml :
<Linearlayout android:background="@drawable/back" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

<Textview android:background="#FFFFFF" android:id="@+id/TextView01" android:layout_gravity="center_vertical|center_horizontal" android:layout_height="wrap_content" android:layout_margintop="180dip" android:layout_width="wrap_content" android:text="Tutorial : application de gestion de code barre." android:textcolor="#000000">
</textview>

<textview android:background="#FFFFFF" android:id="@+id/TextViewResult" android:layout_gravity="center_vertical|center_horizontal" android:layout_height="wrap_content" android:layout_margintop="40dip" android:layout_width="wrap_content" android:text="resultat" android:textcolor="#000000">
</textview>
</Linearlayout>

Le manifeste : lorsque vous rajouter une nouvelle « Activity », pour que celle–ci soit interpréter par le programme, il faut la déclarer dans le manifeste.

Soit avec le mode design d’Eclipse



Soit directement dans le xml

Code xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.jayelco.tuto1"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".main"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name="About"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />

</manifest>


2 - Gestion d’un événement (button)

Maintenant, nous devons retourner sur notre « Activity » principale. Sur celle-ci nous allons placer sur le Layout un bouton et déclencher un événement afin d’appeler l’ »Activity » Account définit précédement.

Code java :
public class main extends Activity {

// Gestion de l'évenement du bouton
private OnClickListener btAboutListener = new OnClickListener() {
@Override
public void onClick(View v) {
// Nouveau Intent
Intent intent = new Intent(main.this, About.class);

// On lance l'Activity
startActivity(intent);
}
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Récuperation du Layout
setContentView(R.layout.main);

// Récupération du bouton "Account" du layout courant
Button btAbout = (Button) this.findViewById(R.id.BtAbout);

// On définit l'evenement click sur le bouton
btAbout.setOnClickListener(btAboutListener);
}
}

Code xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/back"
>

<Button
android:text="About"
android:id="@+id/BtAbout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_marginTop="180dip">
</Button>

</LinearLayout>

Nous pouvons lancer l’application et sur le click du bouton, nous obtiendrons l’affichage d’une nouvelle fenêtre.

3- Passage de paramètre entre deux Activity

Afin de passer un objet entre les deux « Activity », nous avons lors de la création de l’Itent une méthode « putExtra » qui prend comme paramètre :

  •  Un nom
  •  Un objet

Pour rajouter un paramètre, il nous suffit de rajouter ce code dans « main.java »

Code java :

// Gestion de l'évenement du bouton
private OnClickListener btAboutListener = new OnClickListener() {
@Override
public void onClick(View v) {
// Nouveau Intent
Intent intent = new Intent(main.this, About.class);

// Passage de paramètre à la nouvelle Activity
intent.putExtra("myParam", "4545421674");

// On lance l'Activity
startActivity(intent);
}
};

Maintenant que nous avons passé un objet de type « String » à notre « Activity » Account, il va falloir la récupérer !!!

Le code java de « account.jaca » ressemble maintenat à ceci :
public class About extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.about);

// Récupération des parametres
Bundle extras = getIntent().getExtras();
if (extras != null) {

// On récupere notre parametre String
String myParam = (String) extras.get("myParam");

// Récupération du TextView du layout courant
TextView tvResult = (TextView) this.findViewById(R.id.TextViewResult);

// On affecte la valeur
tvResult.setText(myParam);
}
}
}

4 - Animation d’un élément graphique

Voici juste un petit apercu de l’animation d’un élément graphique, cela ne sert à rien ;-)….

L’effet que nous allons faire est juste un translation du bouton, pour cela il faut rajouter le code suivant.

Code java :
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Récuperation du Layout
setContentView(R.layout.main);

// Récupération du bouton "Account" du layout courant
Button btAbout = (Button) this.findViewById(R.id.BtAbout);

// On définit l'evenement click sur le bouton
btAbout.setOnClickListener(btAboutListener);

// Gestion de l'animation
TranslateAnimation trans1 = new TranslateAnimation(-320, 0, 0, 0);
trans1.setStartOffset(320);
trans1.setFillAfter(true);
trans1.setDuration(1000);
btAbout.startAnimation(trans1);
}

Vous pouvez télécharger les sources complètes avec les ressources images à l’adresse suivante : http://tutobarcode.svn.sourceforge.net/viewvc/tutobarcode/ (revision 3)

Le prochain tuto expliquera l’utilisation de la librairie zxing (http://code.google.com/p/zxing/)pour l’utilisation de la camera et de la récupération d’un code barre.

Aucun commentaire:

Enregistrer un commentaire