6 nov. 2009

Scan : Bibliothèque ZXing


Bonjour,

Nous allons voir dans ce tutorial, l'utilisation de la bibliothéque ZXing (http://code.google.com/p/zxing/).
Cette bibliothéque va nous permettre de scanner un code barre.

ZXing est un projet open-source multi-format de code-barres 1D/2D de traitement d'images mis en œuvre en Java. Ce projet met l'accent sur l'utilisation de la caméra intégrée sur les téléphones mobiles et de décoder les codes-barres sur l'appareil, sans communiquer avec un serveur.
Les formats pouvant être décodés sont :
- UPC-A and UPC-E
- EAN-8 and EAN-13
- Code 39
- Code 128
- QR Code
- Data Matrix ('alpha' quality)
- PDF 417 ('alpha' quality)
- ITF



Rappel sur le Intents:
Lorsque Android exécute une application, il restreint cette dernière à des actions bien définies (accès mémoire, accès sur les capteurs, etc…). Cette pratique permet de protéger le système au maximum en évitant de laisser des applications faire comme bon leurs semble.

Malgré l’énorme apport sur la sécurité, le sandoxing restreint fortement la communication entre applications. C’est dans l’optique de contourner ce “problème”, que les Intents ont été conçus. Pour faire simple, un Intent est un ensemble de données qui peut être passé à un autre composant applicatif (de la même application ou non) de façon implicite (requête pour une action – lire de la musique ou scanner un code barre par exemple) ou explicite (lancement d’une classe précise).

Aprés ces petits rappel... c'est partie ;-)
Donc, en reprennant le projet, nous allons rajouter les éléments suivant :
- un nouveau bouton "scan" sur la page d'acceuil
- un nouveau layout pour afficher le résultat du scan

Je vais volontairement passer sur ces étapes de création, vous pouvez toujours aller voir le premier tuto ou j'aborde ces concepts.

Maintenant pour la partie scan, nous allons rajouter ces deux fonctions :

Code java :
...
// Gestion de l'évenement du bouton "Scan"

public OnClickListener btScanListener = new Button.OnClickListener()
{
public void onClick(View v)
{
// Initialisation du scan
IntentIntegrator.initiateScan(main.this);
}
};
......
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode)
{
case IntentIntegrator.REQUEST_CODE:
if (resultCode == RESULT_OK)
{
IntentResult scanResult = IntentIntegrator.parseActivityResult
(
requestCode,
resultCode,
data
);

if (scanResult != null)
{
String out = scanResult.getContents();

if (out != null) {

// Envoi du resultat et affichage de la page details
Intent intent = new Intent(main.this,Result.class);
intent.putExtra("bareCode", out);
startActivity(intent);
}
}
}
}
}
 

La premiere fonction, nous permet d'initialiser la programme de scan via un Itent, la deuxième fonction nous permet de récuperer le résultat.

Deux nouveaux fichiers fournit par ZXing sont aussi insdispensable:
-IntentIntegrator.java
-IntentResult.java

C'est deux classes vont gérér toutes la partie initialisation, detection de l'apk, proposer de télécharger celui-ci si il n'est pas sur le téléphone, etc...

Une fois compilé, je vous conseille d'executer directement sur votre téléphone et non sur l'émulateur.

Prochain tuto : Gestion des WebService via Android, cela va nous permettre d'envoyer le résultat du scan à un webservice et celui-ci nous retournera un objet complexe.

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

1 commentaire:

  1. Bonjour, merci pour vos tutoriels qui sont très utile.
    J'ai une question concernant l'intégration de Zxing. N'y a-il pas possibilité de l'inclure directement dans le projet et d'utiliser les librarires plutot que de demander l'installation de l'application Barcode Scanner ?

    RépondreSupprimer