Wie kann man Barcode-Werte mit der neuen Barcode-API in Google Play Services erfassen?

Ich habe mit dem Beispielcode aus der neuen Google Barcode API gespielt. Es überlagert eine Box und den Barcode-Wert über die Live-Kamera-Feed eines Barcodes. (Auch Gesichter)

Ich kann nicht sagen, wie man einen Barcode-Wert zu meiner App zurückgibt. A) Wie man erzählt, wann ein Erkennungsereignis aufgetreten ist und B) wie man auf den ravValue zur Verwendung in anderen Teilen meiner App zugreifen kann. Kann jemand damit helfen?

  • "Bitmap zu groß, um in eine Textur hochgeladen zu werden"
  • Was bedeutet dieses Android Lint Mean: "Falsche Orientierung?"
  • Wie man ein Bild in einen kreisförmigen Rahmen in android passt
  • Android-Plurale Behandlung von "Null"
  • Setzen Sie Titel Gravity in CenterBarSherlock
  • Android Text Layout Frage: zwei Textansichten, Seite an Seite, mit verschiedenen Layout-Ausrichtungen und Gewichte
  • Https://developers.google.com/vision/multi-tracker-tutorial

    Https://github.com/googlesamples/android-vision

    UPDATE: Auf der Antwort von @ pm0733464 habe ich eine Callback-Schnittstelle (genannt onFound) zur Tracker-Klasse hinzugefügt, auf die ich in der Aktivität zugreifen konnte. Anpassung der Google-Multi-Tracker-Beispiel:

    GraphicTracker :

    class GraphicTracker<T> extends Tracker<T> { private GraphicOverlay mOverlay; private TrackedGraphic<T> mGraphic; private Callback mCallback; GraphicTracker(GraphicOverlay overlay, TrackedGraphic<T> graphic, Callback callback) { mOverlay = overlay; mGraphic = graphic; mCallback = callback; } public interface Callback { void onFound(String barcodeValue); } @Override public void onUpdate(Detector.Detections<T> detectionResults, T item) { mCallback.onFound(((Barcode) item).rawValue); mOverlay.add(mGraphic); mGraphic.updateItem(item); } 

    BarcodeTrackerFactory :

     class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay mGraphicOverlay; private GraphicTracker.Callback mCallback; BarcodeTrackerFactory(GraphicOverlay graphicOverlay, GraphicTracker.Callback callback) { mGraphicOverlay = graphicOverlay; mCallback = callback; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); return new GraphicTracker<>(mGraphicOverlay, graphic, mCallback); } } 

    Hauptaktivität:

     BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay, new GraphicTracker.Callback() { @Override public void onFound(String barcodeValue) { Log.d(TAG, "Barcode in Multitracker = " + barcodeValue); } }); MultiProcessor<Barcode> barcodeMultiProcessor = new MultiProcessor.Builder<>(barcodeFactory).build(); barcodeDetector.setProcessor(barcodeMultiProcessor); 

  • Android - Speichern Sie Bilder in einem bestimmten Ordner
  • Android - Dynamisch die aktuelle Aktivität im Vordergrund
  • Überprüfen Sie die onReceivedSslError () - Methode eines WebViewClient, wenn ein Zertifikat von einer bestimmten selbst signierten CA signiert ist
  • Cursor mit Realm-Bibliothek aufrufen
  • Holen Sie sich die Google Chrome Version in der ARC App
  • Wie kann ich eine Webseite innerhalb der phonegap webview laden?
  • One Solution collect form web for “Wie kann man Barcode-Werte mit der neuen Barcode-API in Google Play Services erfassen?”

    Direkt mit dem Barcode-Detektor

    Ein Ansatz ist, den Barcode-Detektor direkt auf einer Bitmap zu verwenden, wie folgt:

     BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); Frame frame = new Frame.Builder().setBitmap(bitmap).build(); SparseArray<Barcode> barcodes = barcodeDetector.detect(frame); if (barcodes.size() > 0) { // Access detected barcode values } 

    Empfangen von Benachrichtigungen

    Ein weiterer Ansatz ist die Einrichtung einer Pipeline-Struktur für den Empfang von erkannten Barcodes aus Kamera-Vorschau-Video (siehe das MultiTracker-Beispiel auf GitHub). Sie würden Ihren eigenen Tracker definieren, um erkannte Barcodes zu erhalten, wie folgt:

     class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { @Override public Tracker<Barcode> create(Barcode barcode) { return new MyBarcodeTracker(); } } class MyBarcodeTracker extends Tracker<Barcode> { @Override public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode barcode) { // Access detected barcode values } } 

    Eine neue Instanz dieses Tracker wird für jeden Barcode erstellt, wobei die onUpdate-Methode den erkannten Barcode-Wert erhält.

    Sie richten dann die Kamera-Quelle ein, um ständig Bilder in den Detektor zu streamen und die Ergebnisse in Ihrem Tracker zu erhalten:

     BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(); barcodeDetector.setProcessor( new MultiProcessor.Builder<>(barcodeFactory).build()); mCameraSource = new CameraSource.Builder(context, barcodeDetector) .setFacing(CameraSource.CAMERA_FACING_BACK) .setRequestedPreviewSize(1600, 1024) .build(); 

    Später würden Sie entweder die Kamera-Quelle direkt starten oder verwenden Sie es in Verbindung mit einer Ansicht, die die Kamera-Vorschau zeigt (siehe das MultiTracker-Beispiel für weitere Details).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.