2010-01-12 9 views
162

Ich habe gesucht, wie ein Barcode-Scanner zu meiner App hinzufügen. Kennt jemand irgendwelche Beispiele oder weiß, wie man das leicht macht?Verwenden von ZXing zum Erstellen einer android Barcode-Scan-App

+1

Überprüfen Sie [meine detaillierte Antwort] (http://Stackoverflow.com/a/30572168/165071) mit Screenshots und Beispiel Android App. –

+0

ZXing ist nicht die einzige Möglichkeit, einen Barcode zu lesen. Ab 2016 ist es viel einfacher, die [Android Barcode API] (http://stackoverflow.com/questions/6327483/implement-bar-code-scanner-in-android/38881708#38881708) zu verwenden. –

Antwort

207

Das ZXing-Projekt bietet eine eigenständige Barcode-Leseanwendung, die — über Androids Absichtsmechanismus — von anderen Anwendungen aufgerufen werden kann, die Barcode-Scannen integrieren möchten.

Der einfachste Weg, dies zu tun ist, um die ZXing SCANIntent aus Ihrer Anwendung aufrufen, like this:

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 
     } 
    } 
} 

die Schaltfläche mScan verknüpft Drücken würde direkt in den ZXing Barcode-Scanner-Bildschirm (oder Absturz, wenn ZXing starten ist nicht installiert). Sobald ein Barcode erkannt wurde, erhalten Sie das Ergebnis in Ihrer Activity, hier in der contents Variable.

Um den Absturz zu vermeiden und die Dinge für Sie zu vereinfachen, ZXing provided a utility class, die Sie in Ihre Anwendung integrieren können, um die Installation von ZXing reibungsloser zu machen, indem Sie den Benutzer auf den Android Market umleiten, wenn sie nicht bereits installiert haben.

Wenn Sie Barcode-Scanning direkt in Ihre Anwendung integrieren möchten, ohne auf die separate ZXing-Anwendung angewiesen zu sein, dann ist es ein Open-Source-Projekt und Sie können es tun! :)


Edit: Jemand diese Anleitung in diese Antwort bearbeitet (es klingt ein wenig seltsam, ich kann nicht für ihre Richtigkeit bürgen, und ich bin nicht sicher, warum sie von Eclipse verwenden in 2015):

Schritt für Schritt zum einrichten ZXing 3.2.1 in eclipse

  1. zxing-master.zip Herunterladen von "https://github.com/zxing/zxing"
  2. U nzip zxing-master.zip, Eclipse zu importieren "android" Projekt in ZXing-Master
  3. Download-Kern-3.2.1.jar von "http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/"
  4. erstellen "Libs" -Ordner in "android" Projekt und fügen Sie ihn cor -3.2.1.jar in den Ordner libs
  5. Klicken Sie auf Projekt: Wählen Sie "Eigenschaften" -> "Java Compiler", um Ebene auf 1.7 zu ändern. Dann klick auf "Android" ändere "Project build target" auf android 4.4.2+, da die Verwendung von 1.7 erfordert das Kompilieren mit Android 4.4
  6. Wenn "CameraConfigurationUtils.java" nicht in "zxing-master/android/app/src/main/java/com/google/zxing/client/android/kamera/". Sie können es von "zxing-master/android-core/src/main/java/com/google/zxing/client/android/camera /" kopieren und in Ihr Projekt einfügen.
  7. Projekt reinigen und bauen. Wenn Ihr Projekt einen Fehler bei "switch - case" anzeigt, sollten Sie es in "if - else" ändern.
  8. Fertiggestellt. Säubern und bauen Sie ein Projekt. Sie können auf "Properties"> "Android" klicken und auf "Is Libraries" klicken, um sie für Ihr Projekt zu verwenden.
+0

Danke Jungs! Ich bin ein Neuling Android-Entwickler und wollte wirklich nur herausfinden, was es braucht, um einen Barcode-Scanner zu arbeiten. Ich muss noch herausfinden, wie man sogar com.google.zxing zu meinem Projekt hinzufügt. Ist das so einfach, dass Sie einfach com.google.zxing in meinem Code verwenden oder muss ich die Quelle herunterladen und in meine Manifest-Datei importieren? – wajiw

+5

(Ich bin der Projektentwickler BTW - wir können weitermachen unter http://groups.google.com/group/zxing/) Christopher hat Recht. Mit Code wie diesem müssen Sie keinen Projektcode importieren. Sie rufen die Barcode Scanner App über Intent an; Kein Barcode-Scan-Code in Ihrer App. –

+14

Die wirklich nette Weise, es zu tun, erfordert etwas mehr Code, der sicherstellt, dass der Benutzer sauber aufgefordert wird, Barcode-Scanner zu installieren, wenn nötig. Das ist die andere Verbindung, auf die er sich bezieht.Kopieren Sie die Klasse unter http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java und verwenden Sie diese. Auch hier ist kein anderer Code erforderlich. Wenn Sie möchten, können Sie den ganzen Weg gehen und den Scan-Code einbetten, aber ohne einen harten Grund, es zu tun, ist es nur schwieriger für Sie. –

21

Verwenden Sie den bereitgestellten IntentInegrator ist besser. Sie können Ihren Benutzer auffordern, den Barcodescanner zu installieren, wenn er nicht vorhanden ist. Außerdem können Sie die Nachrichten anpassen. Der IntentIntegrator.Die REQUEST_CODE-Konstante enthält den Wert des Anforderungscodes für das onActivityResult, nach dem im obigen if-Block gesucht wird.

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

41

hatte ich ein Problem mit implimenting den Code, bis ich eine Website (Ich kann es jetzt nicht wieder finden), die erklärte, dass Sie die Paketnamen im Namen enthalten müssen von die intent.putExtra.

Es würde die Anwendung hochziehen, würde aber keine Barcodes erkennen, und wenn ich es änderte.

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

zu

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

Es hat super funktioniert. Nur ein Tipp für jeden anderen Anfänger andorid Programmierer.

+1

Ich konnte das nicht funktionieren, bis ich dieser Antwort folgte - so scheint es, dass es wichtig ist, dies zu tun. Danke für den Tipp! – casper

11

Wenn Sie in Ihren Code aufnehmen möchten, und nicht die IntentIntegrator verwenden, dass die ZXing Bibliothek empfehlen Sie

einige dieser Ports verwenden können

http://code.google.com/p/android-zxinglib/

http://code.google.com/p/android-quick-response-code/

Ich benutze das erste und funktioniert perfekt ! Es hat ein Beispielprojekt, um es auszuprobieren

+0

Der erste unterstützt nur das Scannen. Die zweite ist ein gutes Beispiel für die Kodierung eines QR-Codes, der für mich funktioniert hat. –

3

Sie können diese Kurzanleitung http://shyyko.wordpress.com/2013/07/30/zxing-with-android-quick-start/ mit einfachen Beispielprojekt verwenden, um Android-App ohne IntentIntegrator zu bauen.

+0

Ich habe Ihr Beispielprojekt ausprobiert und ich kann es nicht schaffen, einen QRCode zu scannen, in logcat bekomme ich 'com.google.zxing.NotFoundException' und' Decode Fail' ... unter 'DecodeAsyncTask' (Innerer Klasse von 'PreviewCallback') ist das Ergebnis von' onPostExecute' immer Null, auch wenn sich der QRCode innerhalb des Framing-Rechtecks ​​befindet ... auch ich sehe weder den "Laser" noch die gelben Kandidatenpunkte, die am Original erscheinen Zxing App (nicht sicher, ob Sie das implementiert haben) –

+0

es gefunden! es ist nur Scannen im Querformat ... irgendeine Idee, wie das lösen? –

+0

Es gibt weder "Laser", noch die gelben Kandidatenpunkte, denn es ist nur ein Beispiel dafür, wie ZXing integriert werden kann, wenn Sie ein anderes Layout und andere Funktionen als mit Intent-Ansatz verwenden möchten. Wenn das Layout der Absicht für Sie in Ordnung ist, sollten Sie besser bei der von Christopher Orr vorgeschlagenen Vorgehensweise bleiben. –

9

Bei Verwendung von Zxing muss ein Benutzer die Barcode-Scanner-App installieren, was nicht ideal ist. Was Sie wahrscheinlich wollen, ist Zxing direkt in Ihre App zu bündeln.

Ich empfehle diese Bibliothek nutzen: https://github.com/dm77/barcodescanner

Es nimmt all verrückten Build Probleme, die Sie in versuchen, direkt Xzing oder Zbar zu integrieren laufen gehen. Es verwendet diese Bibliotheken unter den Abdeckungen, aber umschließt sie in einer sehr einfach zu bedienenden API.