Jer*_*kub 5 android android-vision
我尝试了新的Google Play服务功能 - 条形码/ QR扫描仪.在示例应用程序中,通过点击按钮开始扫描,结果也会在点击时返回.
有没有办法改变其行为立即返回第一个检测到的条形码/ QR?
我不是第一个对此感到好奇的人.
先感谢您.
Tsu*_*esu 15
我建议不要创建静态变量.他们以后会咬你的.
我的建议是在你的网站上创建某种监听/回调并在你的网站上TrackerFactory使用它Trackers.这是该模式的Fragments,Adapters和很多其他Android课程使用,那么为什么不将它们复制?
步骤1:在您的BarcodeGraphicTracker(代码更改部分的代码)中创建一个接口:这里初始化监听器,它在第一次成功检测时发送最终回调响应,返回到Tracker Activity(摄像头首次打开的一个).
public class BarcodeGraphicTracker extends Tracker<Barcode> {
private GraphicOverlay<BarcodeGraphic> mOverlay;
private BarcodeGraphic mGraphic;
private NewDetectionListener mListener;
[...]
@Override
public void onNewItem(int id, Barcode item) {
mGraphic.setId(id);
if (mListener != null) mListener.onNewDetection(item);
}
public void setListener(NewDetectionListener mListener) {
this.mListener = mListener;
}
[...]
public interface NewDetectionListener {
void onNewDetection(Barcode barcode);
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:更改BarcodeTrackerFactory的构造函数以实现接口.将侦听器实例传递给BarcodeGraphicTracker初始化.码:
public class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> {
private BarcodeGraphicTracker.NewDetectionListener newDetectionListener;
private GraphicOverlay<BarcodeGraphic> mGraphicOverlay;
public BarcodeTrackerFactory(GraphicOverlay<BarcodeGraphic> barcodeGraphicOverlay, BarcodeGraphicTracker.NewDetectionListener listener) {
mGraphicOverlay = barcodeGraphicOverlay;
newDetectionListener = listener;
}
@Override
public Tracker<Barcode> create(Barcode barcode) {
BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay);
BarcodeGraphicTracker tracker = new BarcodeGraphicTracker(mGraphicOverlay, graphic);
if (newDetectionListener != null) tracker.setListener(newDetectionListener);
return tracker;
}
}
Run Code Online (Sandbox Code Playgroud)
最后一步:在Tracker Activity带有回调的初始化检测器实例中.该回调可用于监听来自第一个检测到的条形码/ QR码的数据.
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(graphicOverlay,
new BarcodeGraphicTracker.NewDetectionListener() {
@Override
public void onNewDetection(Barcode barcode) {
Log.d("Barcode detected! - " + barcode.displayValue);
//To send the result back to the Activity which is waiting for the result
Intent data = new Intent();
data.putExtra(BarcodeObject, barcode);
setResult(CommonStatusCodes.SUCCESS, data);
finish();
}
});
barcodeDetector.setProcessor(new MultiProcessor.Builder<>(barcodeFactory).build());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6801 次 |
| 最近记录: |