165 votes

Utilisation de ZXing pour créer une application Android de lecture de codes-barres

J'ai cherché comment ajouter un scanner de codes barres à mon application. Existe-t-il des exemples ou comment puis-je le faire facilement ?

1 votes

Vérifiez ma réponse détaillée avec des captures d'écran et un exemple d'application Android.

0 votes

Le ZXing n'est pas la seule façon de lire un code-barres. Depuis 2016, il est beaucoup plus facile d'utiliser le API code-barres Android .

0 votes

J'ai fait un code pour générer et scanner des codes barres. Vous pouvez suivre ceci pour obtenir le code étape par étape. stackoverflow.com/a/58742737/11613683

210voto

Christopher Orr Points 58514

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

La manière la plus simple de le faire est d'appeler le ZXing SCAN Intent 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
        }
    }
}

En appuyant sur le bouton lié à mScan se lancerait directement dans l'écran du scanner de codes-barres ZXing (ou se planterait si ZXing n'est pas installé). Une fois qu'un code-barres a été reconnu, vous recevrez le résultat dans votre boîte de réception. Activity ici, dans le contents variable.

Pour éviter le plantage et vous simplifier les choses, ZXing a a fourni une classe utilitaire que vous pourriez intégrer dans votre application pour faciliter l'installation de ZXing, en redirigeant l'utilisateur vers l'Android Market s'il ne l'a pas déjà installé.

Enfin, si vous souhaitez intégrer la lecture de codes-barres directement dans votre application sans avoir à installer l'application ZXing séparée, eh bien, c'est un projet open source et vous pouvez le faire ! :)


Edit : Quelqu'un a édité ce guide dans cette réponse (cela semble un peu bizarre, je ne peux pas me porter garant de son exactitude, et je ne suis pas sûr de savoir pourquoi ils utilisent Eclipse en 2015) :

Étape par étape pour configurer zxing 3.2.1 dans eclipse

  1. Téléchargez zxing-master.zip depuis " https://github.com/zxing/zxing "
  2. Dézippez zxing-master.zip, utilisez eclipse pour importer le projet "Android" dans zxing-master.
  3. Téléchargez 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. Ensuite, cliquez sur "Android" et changez "Project build target" en Android 4.4.2+, car l'utilisation de la version 1.7 nécessite une 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 de "zxing-master/Android-core/src/main/java/com/google/zxing/client/Android/camera/" et le coller dans votre projet.
  7. Projet de nettoyage et de construction. Si votre projet montre une erreur à propos de "switch - case", vous devez les changer en "if - else".
  8. Complété. Nettoyer et construire le projet. Vous pouvez cliquer sur "Proprties" > "Android" > cliquer sur "Is Libraries" pour l'utiliser pour votre projet.

0 votes

Merci à tous ! Je suis un développeur Android débutant et je voulais juste commencer à comprendre ce qu'il faudrait pour faire fonctionner un scanner de codes barres. Je dois encore trouver comment ajouter com.google.zxing à mon projet. Est-ce aussi facile que d'utiliser com.google.zxing dans mon code ou dois-je télécharger la source et l'importer dans mon fichier manifeste ?

5 votes

(Je suis le développeur du projet BTW - nous pouvons continuer à l'adresse suivante groups.google.com/group/zxing ) Christopher a raison. En utilisant un tel code, vous n'avez pas besoin d'importer le moindre code de projet. Vous appelez l'application Barcode Scanner via Intent ; il n'y a pas de code de lecture de codes barres dans votre application.

14 votes

La façon la plus agréable de le faire implique un peu plus de code, qui s'assurera que l'utilisateur est proprement invité à installer Barcode Scanner si nécessaire. C'est l'autre lien auquel il fait référence. Copiez la classe à code.google.com/p/zxing/source/browse/trunk/Android-integration/ et l'utiliser. Là encore, aucun autre code n'est nécessaire. Si vous voulez, vous pouvez aller jusqu'au bout et intégrer le code de balayage, mais sans raison valable de le faire, cela ne fera que vous compliquer la tâche.

41voto

user496827 Points 341

J'ai eu un problème avec l'implémentation du code jusqu'à ce que je trouve un site web (je ne peux pas le retrouver maintenant) qui explique que vous devez inclure le nom du paquet dans le nom de l'intent.putExtra.

L'application s'affichait, mais ne reconnaissait pas les codes-barres, et quand j'ai changé le nom de.

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

à

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

Cela a bien fonctionné. Juste un conseil pour tous les autres programmeurs novices d'Android.

23voto

Yack Points 705

Il est préférable d'utiliser l'IntentInegrator fourni. 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 demande pour le onActivityResult à vérifier dans le bloc if 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

11voto

Aracem Points 3331

Si vous voulez inclure dans votre code et ne pas utiliser l'IntentIntegrator que la bibliothèque ZXing recommande, vous pouvez utiliser certains de ces ports :

J'utilise le premier, et il fonctionne parfaitement ! Il y a un exemple de projet pour l'essayer.

0 votes

Le premier ne prend en charge que la numérisation. Le second est un bon exemple d'encodage d'un code QR, il a fonctionné pour moi.

0 votes

Les deux liens sont cassés (Google Code a été fermé). Peut-être pouvez-vous les remplacer (par exemple, ces projets sont peut-être maintenant sur GitHub) ?

11voto

P1X3L5 Points 1778

Pour utiliser Zxing de cette manière, l'utilisateur doit également installer l'application de lecture 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 vivement l'utilisation de cette bibliothèque : https://github.com/dm77/barcodescanner

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X