具有硬触发和软触发EMDK的条形码扫描

时间:2016-02-05 12:29:09

标签: android barcode-scanner motorola-emdk

我们有一个自定义扫描仪来扫描条形码,使用摩托罗拉的emdk库,可以使用SOFT触发器(使用App按钮)。

barcodeManager = (BarcodeManager) this.emdkManager.getInstance(EMDKManager.FEATURE_TYPE.BARCODE);  
scanner = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT);  
scanner.addStatusListener(articleListener);  
scanner.addDataListener(new Scanner.DataListener() {  
    @Override  
    public void onData(ScanDataCollection scanDataCollection) {  
        processData(scanDataCollection);  
    }  
});  
scanner.addDataListener(dataListener);  
scanner.triggerType = Scanner.TriggerType.SOFT_ALWAYS;  
scanner.enable();  

如何同时使用软触发和硬触发来扫描数据? 并使用datalistener处理从两者收到的数据?

1 个答案:

答案 0 :(得分:0)

Zebra Technologies于2014年10月收购摩托罗拉解决方案企业业务,大部分更新文档现已在Zebra Launchpad下提供。

Scanner.TriggerType控制您在Zebra Android设备上激活条形码扫描仪的方式,通常可以设置它或硬盘(按硬件触发按钮激活扫描)或软盘(扫描一旦激活就会激活)调用Scanner.read()方法) 要使应用程序可以使用硬件触发器并使用屏幕上的按钮来激活扫描仪,您可以将triggerType设置为Scanner.TriggerType.HARD并在软扫描的单击事件处理程序中实现登录按钮,以便将TriggerType设置为Scanner.TriggerType.SOFT_ONCE,然后调用Scanner.read()方法。您最终可以检查是否有其他读取活动 这是一个示例实现,您可以测试在Barcode API sample included in the EMDK for Android (latest is v4.0)中添加按钮:

private void softScan() {
    if (scanner != null) {
        try {
            // Reset continuous flag
            bContinuousMode = false;
            if (scanner.isReadPending()) {
                // Cancel the pending read.
                scanner.cancelRead();
            }
            scanner.triggerType = TriggerType.SOFT_ONCE;
            scanner.read();

            new AsyncUiControlUpdate().execute(true);
        } catch (ScannerException e) {
            textViewStatus.setText("Status: " + e.getMessage());
        }
    }
}

因此,通常您使用的是TriggerType.HARD,但是当您按 SCAN 按钮时,您会停用所有待处理的阅读,并切换到TriggerType.SCAN_ONCE
状态监听器的实现需要将扫描器切换回TriggerType.HARD并调用read()方法。

您可以在此github repository找到完整的示例,我已在标准Zebra的EMDK条形码API示例中添加了Soft Scan按钮。

enter image description here

所有数据都由同一个数据监听器接收。