Использовать google mobile vision api для обнаружения первого штрих-кода и отправки данных в другую деятельность

Привет я проверил образец считывателя штрих-кода из google на github, я пытаюсь просто заставить barcodedetector обнаружить первый штрих-код (только один), и когда он отправит декодированный штрих-код в другое действие. Mabye, я ошибаюсь, но мне нужно поставить этот код

BarcodeGraphic graphic = mGraphicOverlay.getFirstGraphic(); Barcode barcode = null; if (graphic != null) { barcode = graphic.getBarcode(); if (barcode != null) { Intent data = new Intent(); data.putExtra(BarcodeObject, barcode); setResult(CommonStatusCodes.SUCCESS, data); finish(); } else { Log.d(TAG, "barcode data is null"); } } else { Log.d(TAG,"no barcode detected"); } return barcode != null; } 

Где-то в этом, чтобы штрих-код был захвачен автоматически без этого, мне нужно нажать, когда появится штрих-код. Я также понял, что мне не нужен MultiProcessor.Builder <>

 BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay); barcodeDetector.setProcessor( new MultiProcessor.Builder<>(barcodeFactory).build()); 

Я был после того же результата. Вот как я это сделал.

Добавить прослушиватель в BarcodeTracker :

 class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay<BarcodeGraphic> mGraphicOverlay; private OnNewBarcodeListener newBarcodeListener; BarcodeTrackerFactory(GraphicOverlay<BarcodeGraphic> barcodeGraphicOverlay) { mGraphicOverlay = barcodeGraphicOverlay; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); newBarcodeListener.onNewItem(barcode); return new BarcodeGraphicTracker(mGraphicOverlay, graphic); } public interface OnNewBarcodeListener { void onNewItem(Barcode item); } public void setOnNewBarcodeListener(OnNewBarcodeListener newBarcodeListener) { this.newBarcodeListener = newBarcodeListener; } } - class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { private GraphicOverlay<BarcodeGraphic> mGraphicOverlay; private OnNewBarcodeListener newBarcodeListener; BarcodeTrackerFactory(GraphicOverlay<BarcodeGraphic> barcodeGraphicOverlay) { mGraphicOverlay = barcodeGraphicOverlay; } @Override public Tracker<Barcode> create(Barcode barcode) { BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); newBarcodeListener.onNewItem(barcode); return new BarcodeGraphicTracker(mGraphicOverlay, graphic); } public interface OnNewBarcodeListener { void onNewItem(Barcode item); } public void setOnNewBarcodeListener(OnNewBarcodeListener newBarcodeListener) { this.newBarcodeListener = newBarcodeListener; } } 

Этот прослушиватель запускается всякий раз, когда вызывается метод create при обнаружении нового штрих-кода.

Далее, из BarcodeCaptureActivity , в методе createCameraSource присоедините новый прослушиватель и отправьте штрих-код, где бы вы ни хотели.

 private void createCameraSource(boolean autoFocus, boolean useFlash) { Context context = getApplicationContext(); // A barcode detector is created to track barcodes. An associated multi-processor instance // is set to receive the barcode detection results, track the barcodes, and maintain // graphics for each barcode on screen. The factory is used by the multi-processor to // create a separate tracker instance for each barcode. BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay); barcodeFactory.setOnNewBarcodeListener(new BarcodeTrackerFactory.OnNewBarcodeListener() { @Override public void onNewItem(Barcode item) { Log.d("BarcodeFound", "Found new barcode! " + item.rawValue); Intent intent = new Intent(this, DoSomethingWithBarcodeActivity.class); intent.putExtra("barcode", item.rawValue); startActivity(intent); } }); ... 

Надеюсь, это поможет!

Intereting Posts