Was ist die bevorzugte Methode zum Einbetten der zxing-Bibliothek, um Scannen bereitzustellen, ohne dass die Barcode-Scanner-App installiert ist? Ich möchte es in Android einbetten, ohne den Benutzer zu zusätzlichen Installationen auffordern zu müssen. (Ähnlich wie das iPhone src funktioniert).
Betten Sie die Zxing-Bibliothek ein, ohne die Barcode-Scanner-App zu verwenden [duplicate]
Sean Owen
Es ist wirklich einfacher, einfach über zu integrieren Absicht. Zuverlässiger und Sie erhalten automatisch Updates. Auch wenn ich es nicht rate…
Der vollständige Quellcode ist unter verfügbar ZXing Projekt. Sie wollen bauen core.jar
von core/
und lege es in dein Android lib/
Ordner, um den Core-Decoder in Ihre App aufzunehmen. Sie möchten nicht einschließen javase
. Sie können den Code in ansehen android/
da es die Quelle für Barcode Scanner ist, aber als Autoren empfehlen wir Ihnen, es nicht einfach zu kopieren und einzufügen.
es ist Apache lizenziert Das heißt, Sie können es frei verwenden, solange Sie dem Benutzer im Wesentlichen Zugriff auf die Lizenzbedingungen gewähren.
-
Wäre es nicht sinnvoll, eine Android-Bibliotheksversion zu haben? Manchmal ist es einfach keine Lösung, Benutzer zu bitten, eine Drittanbieter-App herunterzuladen …
– MasterScrat
5. August 2011 um 16:29 Uhr
-
Es gibt bereits eine Bibliothekslösung:
core.jar
. Die gesamte Android-App steht ebenfalls zur Wiederverwendung zur Verfügung (und wird manchmal unethisch kopiert). Ich bin mir nicht sicher, was einfacher sein kann.– Sean Owen
5. August 2011 um 17:34 Uhr
-
Da ist ein viel von Android-spezifischem Code außerhalb von core.jar. Ich denke, dass MasterScrat nach einem gefragt hat Android Bibliotheksprojekt. Etwas, das Ihnen Ansichten und Kameraunterstützung usw. geben würde, ohne alles, was BarcodeScanner benötigt.
– pforhan
24. Juli 2012 um 15:36 Uhr
-
Ich verstehe das. Die Teile, die wirklich als Bibliothek wiederverwendbar sind, werden bereits im Kern zur Verfügung gestellt. Der Android-Code ist nicht so paketfähig; source ist wohl die sinnvollste ‘Verpackung’ für diese Bits. Die Bereitstellung einer vollständig integrierbaren Benutzeroberfläche ist kein Ziel – die gesamte App ist bereits als API für Intent zugänglich.
– Sean Owen
24. Juli 2012 um 15:42 Uhr
-
@konopko die Dekodierungsbibliothek ist bereits als Bibliothek ausgebrochen. Sie möchten nur eine vorgefertigte App zum Klonen. Ich möchte nicht, dass du das tust. So funktioniert Android auch nicht wirklich. Ihr Argument und andere sind nur, dass es einfacher oder rentabler wäre, als eine eigene App zu erstellen. Das finde ich nicht zwingend.
– Sean Owen
11. Dezember 2015 um 9:19 Uhr
Palani Babu
Android QR/Barcode/Multiformat-Decoder.
Ich habe eine Android-Anwendung mit den ZXing-APIs erstellt und nur den Dekodierungscode in meine Anwendung eingebettet. Die Eingabe für diesen Decoder erfolgte über die SD-Karte des Android-Emulators.
Hier sind die Schritte:
-
Zuerst habe ich eine AVD (Emulator) Version 4 in meiner Eclipse-IDE mit aktivierten SD-Karten- und Kamerafunktionen erstellt.
-
Als nächstes habe ich eine SDCard mit den folgenden Befehlen in der Eingabeaufforderung erstellt:
c:\>mksdcard 40M mysdcard.iso
wobei 40 MB die Größe der SD-Karte ist, die ich erstellt habe. Diese wird auf dem Laufwerk C: gespeichert. Beachten Sie, dass der .iso-Teil wichtig ist.
-
Als nächstes müssen wir die SD-Karte mit den folgenden Befehlen in der Eingabeaufforderung in den Emulator einhängen:
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
Hier ist myavd4 der Name des virtuellen Emulators/Android-Geräts, das ich in Schritt 1 erstellt habe. Das „@“-Zeichen vor dem Avd-Namen ist ebenfalls wichtig.
Lassen Sie den Emulator die ganze Zeit laufen. Wenn er geschlossen wird, müssen wir die obigen 3 Schritte wiederholen.
-
Wir können den QR-Code oder andere Codebilder, die wir haben, auf diese SD-Karte übertragen, die in unserem Emulator installiert ist, indem wir die folgenden Befehle in der Eingabeaufforderung verwenden:
c:\>adb push "c:\myqrcode.png" /sdcard
-
Starten Sie als Nächstes in der Eclipse-IDE ein neues Android-Projekt. Der folgende Code sollte in die QRDecoder.java-Datei unseres Projekts eingefügt werden.
package com.example.palani; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import com.google.zxing.BarcodeFormat; import com.google.zxing.BinaryBitmap; import com.google.zxing.ChecksumException; import com.google.zxing.FormatException; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; import com.google.zxing.NotFoundException; import com.google.zxing.Reader; import com.google.zxing.Result; import com.google.zxing.ResultPoint; import com.google.zxing.client.androidtest.RGBLuminanceSource; import com.google.zxing.common.HybridBinarizer; public class QRDecoder extends Activity implements OnClickListener { public static class Global { public static String text=null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png"); TextView textv = (TextView) findViewById(R.id.mytext); View webbutton=findViewById(R.id.webbutton); LuminanceSource source = new RGBLuminanceSource(bMap); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); try { Result result = reader.decode(bitmap); Global.text = result.getText(); byte[] rawBytes = result.getRawBytes(); BarcodeFormat format = result.getBarcodeFormat(); ResultPoint[] points = result.getResultPoints(); textv.setText(Global.text); webbutton.setOnClickListener(this); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ChecksumException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onClick(View v) { Uri uri = Uri.parse(Global.text); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }
-
Als nächstes habe ich den ZXing-Quellcode (ZXing-1.6.zip) über den folgenden Link heruntergeladen.
http://code.google.com/p/zxing/downloads/list
Extrahieren Sie diese dann und navigieren Sie zu D:\zxing-1.6\core\src\com
Kopieren Sie den Ordner com und fügen Sie ihn in unser Paket in Eclipse ein.
(Beachten Sie, klicken Sie mit der rechten Maustaste auf das Paket unseres Projekts und fügen Sie es ein … wenn Sie aufgefordert werden, den vorhandenen Ordner zu ersetzen, wählen Sie Ja)
-
Kopieren Sie als Nächstes den folgenden Code und fügen Sie ihn in die Datei res/layout/main.xml ein
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dip" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/mbackground1" android:gravity="center_horizontal" android:text="@string/decode_label" android:padding="20dip" /> <TextView android:id="@+id/mytext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@color/mbackground2" android:textColor="@color/mytextcolor" android:padding="20dip" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/continue_label" android:gravity="center_horizontal" android:textColor="@color/mytextcolor" android:padding="20dip" /> <Button android:id="@+id/webbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/web_button" android:textColor="@color/mytextcolor" /> </LinearLayout>
-
Kopieren Sie als Nächstes den folgenden Code und fügen Sie ihn in die Datei res/values/strings.xml ein
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, QRDecoder!</string> <string name="app_name">QRDecoder</string> <string name="continue_label">Click below to load the URL!!</string> <string name="web_button">Load the URL!!</string> <string name="decode_label">Decoded URL</string> </resources>
-
Kopieren Sie als Nächstes den folgenden Code und fügen Sie ihn in die Datei res/values/color.xml ein. Wenn er nicht vorhanden ist, erstellen Sie einen.
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="mbackground1">#7cfc00</color> <color name="mbackground2">#ffff00</color> <color name="mytextcolor">#d2691e</color> </resources>
-
Kopieren Sie als Nächstes den folgenden Code und fügen Sie ihn nach dem öffnenden Tag in die Manifestdatei ein
<manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-
Also, diese oben genannten Schritte sind erledigt … unsere Anwendung ist fertig. Jetzt können Sie die Anwendung ausführen und erhalten das decodierte Ergebnis des eingegebenen Bildes, das wir angegeben haben.
-
Um die Eingabe zu ändern, schieben Sie mit dem folgenden Befehl in der Eingabeaufforderung eine andere Datei auf die SD-Karte
c:\>adb push "c:\image2.png" /sdcard
und ändern Sie die Eingabe in unserem QRDecoder.java, um dasselbe widerzuspiegeln
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
Die Eingaben können jedes Format wie QRCode, Barcode usw. haben. Die Bildtypen können bmp, jpg oder png sein.
Ich habe die folgende Website zum Generieren der QR-Codes zu Testzwecken verwendet
Vielen Dank und ich möchte den Punkt erwähnen, dass ich nur ein Anfänger in der Entwicklung von Android- und mobilen Anwendungen bin und mich für alle Fehler entschuldige, die ich möglicherweise gemacht habe …
-
Tolle Beschreibung. Hat mir wirklich geholfen, mein Barcode-Lesegerät zum Laufen zu bringen. Danke!
– Betaminos
21. August 2012 um 14:19 Uhr
Wenn Sie der Palani-Antwort folgen und nur den ZXING-Kern importieren möchten. So können Sie es verwenden RGBLuminanceSource ohne Import von zxing.androidtest.
// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;
// Bitmap mBitmap; // some bitmap...
int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
e.printStackTrace();
}
-
Ja, das habe ich hier gezeigt, anstatt RGBLuminanceSource von com.google.zxing.client.androidtest zu verwenden, wie in Palanis Antwort, die andere Parameter hat.
– Rui Marken
2. Februar 2014 um 14:23 Uhr
FireZenk
Jetzt du kannst den … benutzen offizielle Barcode-API von Google:
Die Barcode-API erkennt Barcodes in Echtzeit auf dem Gerät in jeder Ausrichtung. Es kann auch mehrere Barcodes gleichzeitig erkennen.
Es liest die folgenden Barcode-Formate:
- 1D-Barcodes: EAN-13, EAN-8, UPC-A, UPC-E, Code-39, Code-93, Code-128, ITF, Codabar
- 2D-Barcodes: QR-Code, Data Matrix, PDF-417, AZTEC
Es analysiert automatisch QR-Codes, Data Matrix, PDF-417 und Aztec-Werte für die folgenden unterstützten Formate:
- URL
- Kontaktinformationen (VCARD usw.)
- Kalenderereignis
- Telefon
- SMS
- ISBN
- W-lan
- Geo-Standort (Breiten- und Längengrad)
- AAMVA-Führerschein/ID
Ich selbst habe diese Methode ausprobiert und schien vor allem zu funktionieren.
Obwohl ich ein paar Punkte zu machen habe
-
Es wird sich über das Paket com.google.zxing.client.androidtest beschweren, das für die Klasse RGBLuminanceSource benötigt wird, die im Paket gefunden und in der QRDecoder-Aktivität verwendet wird. Importieren Sie also auch das Paket zxing/androidtest.
-
Wenn Sie die Zxing-Bibliothek außerhalb Ihres Pakets hinzufügen, müssen Sie alle R.java-Referenzen bearbeiten, da die R.java-Datei in ihrem Paket nicht gefunden wird.
Zum Beispiel:
Anstatt
mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);
in der Datei BenchmarkActivity.java verwenden
mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);
Wir können auch die DDMS-Schnittstelle von Eclipse verwenden, um den QRCode auf die SD-Karte des Geräts zu übertragen.
bruyelle
https://github.com/dm77/barcodescanner
Ich habe diese Bibliothek gegenüber Google Play Services bevorzugt, da für Google Play Services wie üblich dieselbe Version auf dem Gerät installiert sein muss.
Es bettet Zxing in das neue Build-System ein und bietet ein aar. Wirklich cool.
akash kubavat
Ich habe versucht einzubetten ZXing (XZing) für eine Weile, bis ich Zbar entdeckte. Sie haben eine einfachere Art der Einbettung, weniger Code und einfache Beispiele.
-
ZBar wurde seit mehr als einem Jahr nicht aktualisiert.
– CodyBugstein
7. Oktober 2014 um 7:54 Uhr
-
ZBar wurde seit Februar 2013 nicht mehr aktualisiert.
– Dan Dascalescu
11. August 2016 um 5:04 Uhr
Laden Sie die Core- und Java-Komponenten herunter und betten Sie sie ggf. ein.
– Jakob Schwarz
31. Januar 2011 um 18:18 Uhr
Aber Sie müssen sich die Lizenz ansehen und sehen, was Sie tun dürfen, ob Sie es einfach in Ihr Programm aufnehmen können.
– Jakob Schwarz
31. Januar 2011 um 18:18 Uhr