¿Cómo capturar los valores de los códigos de barras con la nueva API de código de barras en Google Play Services?

He estado jugando con el código de ejemplo de la nueva API de código de barras de Google. Superpone una caja y el valor del código de barras sobre la alimentación de la cámara en vivo de un código de barras. (También se enfrenta)

No puedo decir cómo devolver un valor de código de barras a mi aplicación. A) Cómo saber cuándo ha ocurrido un evento de detección y B) cómo acceder a ravValue para usarlo en otras partes de mi aplicación. ¿Alguien puede ayudarme con esto?

Https://developers.google.com/vision/multi-tracker-tutorial

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

ACTUALIZACIÓN: Basándose en la respuesta de @ pm0733464, agregué una interfaz de devolución de llamada (llamada onFound) a la clase Tracker a la que podía acceder en la Actividad. Adaptación del ejemplo de Google multi-tracker:

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

Actividad principal:

 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); 

Uso directo del detector de código de barras

Un enfoque es utilizar el detector de código de barras directamente en un mapa de bits, como esto:

 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 } 

Recepción de notificaciones

Otro enfoque consiste en configurar una estructura de canalización para recibir códigos de barras detectados a partir del video de previsualización de cámara (ver el ejemplo de MultiTracker en GitHub). Usted definiría su propio Tracker para recibir códigos de barras detectados, como esto:

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

Se crea una nueva instancia de este rastreador para cada código de barras, con el método onUpdate recibiendo el valor de código de barras detectado.

A continuación, configurar la fuente de la cámara para transmitir continuamente imágenes en el detector, recibiendo los resultados en su rastreador:

 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(); 

Posteriormente, se inicia la fuente de la cámara directamente o se utiliza junto con una vista que muestra la vista previa de la cámara (consulte el ejemplo de MultiTracker para obtener más detalles).

  • use google mobile vision api para detectar el primer código de barras y enviar los datos a otra actividad
  • Biblioteca de detección de códigos de barras de Google Vision no se instala en algunos dispositivos
  • Grabadora de medios con Google Vision API
  • Android Vision - Reduce la ventana de seguimiento de códigos de barras
  • Área de detección de límites en Vision API
  • Ejemplos de la API de Google Visión: Obtenga el enfoque de CameraSource
  • Vista de la computadora Android JavaCV OpenCV FastCV comparación
  • Tome la foto con dibujable / pintura en la cara con la api de la visión
  • Google Vision API: para dibujar el diseño gráfico en la vista previa de la cámara que limita el código QR
  • Detección de rostros de Android: Vision API o Camera API
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.