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?

  • Wie kann ich eine Datei mit adb.exe durchsuchen?
  • Theme-Vorschau schlägt in Eclipse fehl
  • Welche Optimierungen kann ich von Dalvik und der Android-Toolchain erwarten?
  • Wenn das Fragment mit SwipeRefreshLayout während der Erfrischung, Fragment friert aber eigentlich noch funktionieren
  • Org.apache.http.conn.HttpHostConnectException: Verbindung zu http: // localhost verweigerte in android
  • Android und Unity 3D Spiel Entwicklung
  • 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 - Format json string in adb logcat Ausgabe
  • Audioformat für iOS und Android
  • Wie kann ich den Handler stoppen?
  • Übergeben von Arraylisten von Objekten zwischen Aktivitäten
  • Low-Level Audio API für Android
  • Finden Sie fehlendeError im Projekt
  • 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.