Ich benutze com.google.android.gms.vision.barcode.BarcodeDetector
, um QR-Codes zu lesen. Das Problem ist, dass diese Codes rohe Binärdaten übertragen; keine Telefonnummern, keine URLs, keine Geopunkte ... Ich kann diese QR-Codes nicht ändern, weil sie in einer anderen Anwendung generiert werden.
Wenn ich diese QR-Codes mit der Android Barcode-API scanne, kann ich mit dem resultierenden Barcode
-Objekt nicht auf die Rohdaten zugreifen, obwohl sie es wissen müssen!
Alles, was ich bekomme, ist "Unknown encoding"
message in rawValue
und displayValue
properties.
Eine Eigenschaft byte[]
anstelle von zwei String
Eigenschaften wäre sinnvoller, da QR-Codes allgemeine Daten enthalten können.
Ich sehe den Punkt nicht, an dem Rohdaten-Byte-Arrays von Entwicklern versteckt werden. Könnte ich irgendwie die Klasse BarcodeDetector
oder Barcode
erweitern, um zu bekommen, was ich brauche?
Bearbeiten:
Dies ist ein absolut gültiger QR-Code, der von Vision API nicht gelesen werden kann, obwohl er 1024 Byte Daten enthält:
QR-Codes - rohe Binärdaten sind verwandt, lösen aber nicht mein Problem.
Ich denke, dass Sie einige der Implementierung selbst schreiben müssen. Wie ich in der API klar sehen kann, wird die rawData von String gehalten, die einfach nicht die Integrität Ihres binären Datentyps gewährleistet.
Ich schreibe meinen eigenen BarcodeDetector mit meinem eigenen BarCode-Objekt mit Byte [] als Datentyp für rawData von QR-Code und überschreibe detect () -Methode, um die rawData meiner BarCode-Implementierung zuzuordnen. Da Ihr Fall sehr spezifisch für die Anforderung ist, sollten Sie nicht zögern, Ihre eigene Implementierung zu schreiben. Kann es für andere auch auf GitHub teilen.
Ich habe QR-Codes mit binärem Inhalt über dieses Bibliotheksmodul . Das alte ZXing lieferte die binäre Nutzlast nicht aus der Box, aber das neue bietet die binäre Nutzlast - aber soweit ich mich erinnere, nur als Teil eines bekannten Formats.
Tags und Links java android barcode android-vision qr-code