如何禁用多个条形码检测android Vision API

Kis*_*ava 9 android barcode-scanner android-vision

我正试图禁用多次Barcode检测.如何禁用MultiProcessor使用Google Vision API,我无法找到官方网站的任何解决方案在这里

我从这里下载了样品

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
    BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay);
    barcodeDetector.setProcessor(
            new MultiProcessor.Builder<>(barcodeFactory).build());
Run Code Online (Sandbox Code Playgroud)

即使删除线下,我根本无法检测到.

 barcodeDetector.setProcessor(
        new MultiProcessor.Builder<>(barcodeFactory).build());
Run Code Online (Sandbox Code Playgroud)

Kis*_*ava 1

Barcode我通过探索示例代码和一些逻辑实现,同时解决了这个多重检测问题。

解决办法是:停止mPreview并在1秒后重新启动delay

创建回调监听器

public interface BarCodeDetectListener {
void onBarCodeDetect(Barcode barcode);
}
Run Code Online (Sandbox Code Playgroud)

条码图形追踪器

当设备检测到Barcode内部onNewItem()回调时Barcodefragment

class BarcodeGraphicTracker extends Tracker<Barcode> {
...
...
private BarcodeGraphic mGraphic;
private BarCodeDetectListener barCodeDetectListener;
...

 /**
  * Start tracking the detected item instance within the item overlay.
  */
 @Override
 public void onNewItem(int id, Barcode item) {
    mGraphic.setId(id);
    barCodeDetectListener.onBarCodeDetect(item);
 }
}
Run Code Online (Sandbox Code Playgroud)

条形码片段

@SuppressLint("NewApi")
public class SurveyBarCodeFragment extends Fragment implements BarCodeDetectListener {
  ...
  private CameraSourcePreview mPreview;
  private CameraSource mCameraSource;
  ...



 @Override
 public void onBarCodeDetect(final Barcode barcode) {
  new Handler().post(new Runnable() {
        @Override
        public void run() {
            mPreview.stop(); //Stop preview
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    try {
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                            // TODO: Consider calling
                            //    ActivityCompat#requestPermissions
                            // here to request the missing permissions, and then overriding
                            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                            //                                          int[] grantResults)
                            // to handle the case where the user grants the permission. See the documentation
                            // for ActivityCompat#requestPermissions for more details.
                            return;
                        }
                        //Start preview after 1s delay
                        mPreview.start(mCameraSource);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }, 1000);
        }
    });

 }
}
Run Code Online (Sandbox Code Playgroud)