我试图在同一时间禁用多个Barcode检测。如何使用MultiProcessor禁用Google Vision API,我无法从官方站点这里找到任何解决方案
我已经从这里下载了样本
码
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay);
barcodeDetector.setProcessor(
new MultiProcessor.Builder<>(barcodeFactory).build());即使删除以下一行,我也无法检测到。
barcodeDetector.setProcessor(
new MultiProcessor.Builder<>(barcodeFactory).build());发布于 2017-02-11 13:45:16
通过探索示例代码和一些逻辑实现,我同时解决了这个多重Barcode检测问题。
解决方案是:停止mPreview并在1秒delay之后重新启动
创建回调侦听器
public interface BarCodeDetectListener {
void onBarCodeDetect(Barcode barcode);
}BarcodeGraphicTracker
当设备在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);
}
}BarCodeFragment
@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);
}
});
}
}发布于 2017-02-08 12:07:43
更新BarcodeGraphicTracker并实现onNewItem函数,如下所示:
public class BarcodeGraphicTracker extends Tracker<Barcode> {
private static final String TAG = "Barcode-reader";
@Override
public void onNewItem(int id, final Barcode item) {
Log.d(TAG, "Detected!!"+ item.toString());
Runnable r=new Runnable()
{
public void run()
{
//write your code here
}
}
};
getActivity().runOnUiThread(r);
}
@Override
public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode item) {
}
}BarcodeTrackerFactory为:
public class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
@Override
public Tracker<Barcode> create(Barcode barcode) {
return new BarcodeGraphicTracker();
}
}https://stackoverflow.com/questions/42112519
复制相似问题