Les scripts Ant vous permettront de générer une version optimisée de l’application :

Pour cela, vous aurez besoin de Ant (http://ant.apache.org) et de Proguard (http://sourceforge.net/project/showfiles.php?group_id=54750&package_id=49483). Dézippez l’archive de proguard et copier-collez «lib\proguard.jar» dans «bin».

Puis dans le répertoire de ZXing, d’abord dans «core» qui contient les fonctions de reconnaissance/génération des codes-barres :

ant -f build.xml build-no-debug

Dans «android» :

ant -f build.xml -Dandroid-home=«racine du SDK android» -DWTK-home=«racine du répertoire de proguard»

Lancez l’émulateur («android SDK»\tools\emulator). Et finalement, installez l’application avec la commande suivante :

ant -f build.xml install -Dandroid-home=«racine du SDK android»

Vous devriez alors trouver une application «Barcode Scanner» dans l’émulateur.

Vous ne pourrez malheureusement pas la tester pleinement dans l’émulateur (Nous vous apprendrons dans un autre billet à utiliser une Webcam depuis l’émulateur), mais sachez que cette application est capable de partager vos contacts/favoris via code QR, rechercher des produits grâce à leur code-barre, etc.

share

Maintenant créez un nouveau projet Android, changez le layout main.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical"
  4.     android:layout_width="fill_parent"
  5.     android:layout_height="fill_parent"
  6.     >
  7. <Button
  8.     android:id="@+id/scanButton"
  9.     android:layout_width="fill_parent"
  10.     android:layout_height="wrap_content"
  11.     android:text="Click to scan"
  12.     />
  13. </LinearLayout>

Et remplacez le code de votre activité par:

  1. private static final int REQUEST_SCAN = 0;
  2.  
  3.  
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6.     super.onCreate(savedInstanceState);
  7.     setContentView(R.layout.main);
  8.     Button btScan = (Button) this.findViewById(R.id.scanButton);
  9.     btScan.setOnClickListener(btScanListener);
  10. }
  11.  
  12. private Button.OnClickListener btScanListener = new Button.OnClickListener() {
  13.     public void onClick(View v) {
  14.         Intent intent = new Intent("com.google.zxing.client.android.SCAN");
  15.         intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
  16.  
  17.  
  18.         try {
  19.           startActivityForResult(intent, REQUEST_SCAN);
  20.        } catch (ActivityNotFoundException e) {
  21.          Toast.makeText(Main.this, "Barcode Scanner ne semple pas être installé", 2000).show();
  22.        }
  23.     }
  24. };
  25.  
  26. public void onActivityResult(int reqCode, int resCode, Intent intent) {
  27.     if (REQUEST_SCAN == reqCode) {
  28.         if (RESULT_OK == resCode) {
  29.             String contents = intent.getStringExtra("SCAN_RESULT");
  30.             Toast.makeText(this, "Succès : " + contents, 2000).show();
  31.         } else if (RESULT_CANCELED == resCode) {
  32.             Toast.makeText(this, "Scan annulé", 2000).show();
  33.         }
  34.     }
  35. }
  36.  
  37.  

Lancez votre projet dans l’émulateur, cliquez sur le bouton, puis à défaut de pouvoir scanner, appuyez sur le bouton «Back», le message «scan annulé» devrait alors s’afficher, nous indiquant que «Barcode Scanner» nous a bel et bien renvoyé un résultat.

L’aspect visuel n’est certes pas spectaculaire, mais constatez que notre application n’a aucune dépendance en terme de code vis-à-vis de «Barcode Scanner», ce qui est topissime !

Si Barcode Scanner n’est pas présent dans l’émulateur, alors l’exception ActivityNotFoundException est levée. Une classe IntentIntegrator (http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java) est à votre disposition pour générer l’Intent de scan qui vous permet de réduire le code émettant une Intent à:

IntentIntegrator.initiateScan(Main.this);

De plus, cette méthode propose le cas échéant de télécharger Barcode Scanner depuis la Marketplace Android (ne fonctionne que sur un vrai téléphone).

Pour générer un code QR, l’Intent à créer est la suivante:

Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
intent.putExtra("ENCODE_DATA", “votre message”);
intent.putExtra("ENCODE_TYPE", "TEXT_TYPE");

enc

Les types de contenu que vous pouvez encoder sont dans la classe com.google.zxing.client.android.Contents.Type.

Vous trouverez les sources complètes de ma démo ici : http://code.google.com/p/example-zxing/source/checkout