use google mobile vision api to detect the first barcode and send the data to another activity

旧城冷巷雨未停 提交于 2020-02-22 05:40:58

问题


Hi I checked the barcode reader sample from google on github , I am trying to just make the barcodedetector detect the first barcode (only one) and when it does it send the decoded barcode to another activity. Mabye I am wrong but I need to put this code

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

somewhere in this one so that the barcode is captured automatically without that I need to tap when barcode graphic appears.I also figured that I dont need the MultiProcessor.Builder<>

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

回答1:


I was after the same outcome. Here is how i accomplished it.

Add a listener to 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;
}

}

This listener is fired whenever the create method is called when a new barcode is detected.

Next, from the BarcodeCaptureActivity, under the createCameraSource method attach a new listener and send the barcode wherever you'd like it.

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

Hope that helps!



来源:https://stackoverflow.com/questions/35835399/use-google-mobile-vision-api-to-detect-the-first-barcode-and-send-the-data-to-an

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!