web-dev-qa-db-fra.com

Utilisation de ZXing pour créer une application de balayage de codes à barres Android

Je cherchais comment ajouter un scanner de codes à barres à mon application. Y at-il des exemples ou comment puis-je le faire facilement?

163
wajiw

Le projet ZXing fournit une application autonome de lecteur de codes à barres qui - via le mécanisme d'intention d'Android - peut être appelée par d'autres applications souhaitant intégrer la numérisation de codes à barres.

Pour ce faire, le plus simple consiste à appeler le ZXing SCANIntent à partir de votre application, comme ceci :

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.Android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }
};

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

Appuyer sur le bouton associé à mScan lancera directement l'écran du scanner de codes à barres ZXing (ou bloquera si ZXing n'est pas installé). Une fois qu'un code à barres a été reconnu, vous obtenez le résultat dans votre variable Activity, ici dans la variable contents.

Pour éviter les pannes et simplifier les choses pour vous, ZXing a fourni une classe d’utilitaire que vous pourriez intégrer à votre application pour rendre l’installation de ZXing plus fluide, en redirigeant l’utilisateur vers Android Market s'ils ne l'ont pas déjà installé.

Enfin, si vous souhaitez intégrer la numérisation de codes à barres directement dans votre application sans avoir à installer l’application distincte ZXing, c’est un projet open source et vous pouvez le faire! :)


Edit: Quelqu'un a modifié ce guide dans cette réponse (cela semble un peu étrange, je ne peux pas en garantir l'exactitude, et je ne suis pas sûr pourquoi ils utilisent Eclipse en 2015):

Pas à pas pour configurer zxing 3.2.1 dans Eclipse

  1. Téléchargez zxing-master.Zip à partir de " https://github.com/zxing/zxing "
  2. Décompressez zxing-master.Zip, utilisez Eclipse pour importer un projet "Android" dans zxing-master
  3. Téléchargez le fichier core-3.2.1.jar à partir de " http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/ "
  4. Créez le dossier "libs" dans le projet "Android" et collez cor-3.2.1.jar dans le dossier libs.
  5. Cliquez sur le projet: choisissez "propriétés" -> "compilateur Java" pour changer le niveau à 1.7. Cliquez ensuite sur "Android", puis "Modification de la cible du projet" en Android 4.4.2+, car l'utilisation de la version 1.7 nécessite la compilation avec Android 4.4.
  6. Si "CameraConfigurationUtils.Java" n'existe pas dans "zxing-master/Android/app/src/main/Java/com/google/zxing/client/Android/camera /". Vous pouvez le copier depuis "zxing-master/Android-core/src/main/Java/com/google/zxing/client/Android/appareil photo /" et le coller dans votre projet.
  7. Nettoyer et construire le projet. Si votre projet affiche une erreur à propos de "switch-case", vous devez les remplacer par "if-else".
  8. Terminé. Nettoyer et construire le projet. Vous pouvez cliquer sur "Propriétés"> "Android"> cliquer sur "Est-ce que les bibliothèques" à utiliser pour votre projet.
207
Christopher Orr

J'ai eu un problème avec l'implémentation du code jusqu'à ce que je trouve un site Web (je ne le trouve plus pour le moment) qui explique que vous devez inclure le nom du paquet dans le nom de l'intention.putExtra.

Il ouvrirait l'application, mais il ne reconnaîtrait aucun code à barres, et quand je l'ai changé.

intent.putExtra("SCAN_MODE", "QR_CODE_MODE");

à

intent.putExtra("com.google.zxing.client.Android.SCAN.SCAN_MODE", "QR_CODE_MODE");

Cela a très bien fonctionné. Juste un conseil pour tout autre programmeur novice Android.

41
user496827

L'utilisation de l'IntentInegrator fourni est préférable. Il vous permet d’inviter votre utilisateur à installer le lecteur de codes à barres s’il ne l’a pas. Il vous permet également de personnaliser les messages. La constante IntentIntegrator.REQUEST_CODE contient la valeur du code de requête du onActivityResult à vérifier dans le bloc ci-dessus.

IntentIntegrator intentIntegrator = new IntentIntegrator(this); // where this is activity 
intentIntegrator.initiateScan(IntentIntegrator.ALL_CODE_TYPES); // or QR_CODE_TYPES if you need to scan QR

IntentIntegrator.Java

23
Yack

L'utilisation de Zxing de cette manière nécessite qu'un utilisateur installe également l'application de scanner de codes à barres, ce qui n'est pas idéal. Ce que vous voulez probablement, c'est intégrer Zxing directement dans votre application.

Je recommande fortement d'utiliser cette bibliothèque: https://github.com/dm77/barcodescanner

Cela prend tous les problèmes de construction délirants que vous allez rencontrer en essayant d’intégrer directement Xzing ou Zbar. Il utilise ces bibliothèques sous les couvertures, mais les enveloppe dans une API très simple à utiliser.

11
Michael Peterson

Si vous souhaitez inclure dans votre code et ne pas utiliser IntentIntegrator recommandé par la bibliothèque ZXing, vous pouvez utiliser certains de ces ports:

J'utilise le premier, et ça marche parfaitement! Il a un exemple de projet pour l'essayer.

11
Aracem

La détection de code à barres est maintenant disponible dans services Google Play . Code lab du processus d'installation, voici le api docs , et un exemple de projet .

6
Jim Baca

Vous pouvez utiliser ce guide de démarrage rapide http://shyyko.wordpress.com/2013/07/30/zxing-with-Android-quick-start/ avec un exemple de projet simple à construire Android application sans IntentIntegrator.

3
shyyko.serhiy