utilizar usar teléfono scan para online office leer lector full escáner escanear código con como codigo celular barras android google-play-services google-vision

android - usar - ¿Cómo capturar valores de código de barras con la nueva API de código de barras en los servicios de Google Play?



usar celular como lector de codigo de barras para pc (1)

Directamente utilizando el detector de código de barras.

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

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 }

Recibiendo notificaciones

Otro enfoque es configurar una estructura de tubería para recibir los códigos de barras detectados desde el video de vista previa de la cámara (consulte el ejemplo de MultiTracker en GitHub). Definirías tu propio Rastreador para recibir códigos de barras detectados, como este:

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 del código de barras detectado.

A continuación, configura la fuente de la cámara para transmitir continuamente imágenes al 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();

Más tarde, puede iniciar la fuente de la cámara directamente o utilizarla junto con una vista que muestra la vista previa de la cámara (consulte el ejemplo del MultiTracker para obtener más detalles).

He estado jugando con el código de muestra 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 caras)

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 usar 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: Sobre la base de 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 de la muestra de seguimiento múltiple de Google:

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