使用 Google 移动视觉 API 检测第一个条形码并将数据发送到另一个活动。

3

你好,我查看了谷歌在Github上发布的条形码阅读器示例。我想让条形码检测器仅检测第一个条形码(只有一个),并在检测到时将解码的条形码发送到另一个活动中。也许我理解有误,但我需要将以下代码放入其中:

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());
1个回答

5
我也想达到同样的目标。以下是我完成此操作的方法。
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;
}

}

每当检测到新的条形码时,调用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);
        }
    });
...

希望这能有所帮助!

如果您的监听器需要更新任何UI组件,例如EditText或TextView,请记得使用'runOnUiThread'块运行它。 - ErickBergmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接