0

我们有一个自定义扫描仪来扫描条形码,它使用摩托罗拉的 emdk 库与 SOFT 触发器(使用应用程序按钮)配合使用。

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 处理从两者接收到的数据?

4

1 回答 1

2

Zebra Technologies 于 2014 年 10 月收购了摩托罗拉解决方案企业业务,大部分更新的文档现在都可以在Zebra Launchpad下获得。

Scanner.TriggerType控制您希望如何在 Zebra Android 设备上激活条形码扫描仪,通常您可以将其设置为硬(按下硬件触发按钮激活扫描)或软(调用该Scanner.read()方法后立即激活扫描)。
要拥有可以使用硬件触发器并具有屏幕按钮来激活扫描仪的应用程序,您可以将 triggerType 设置为Scanner.TriggerType.HARD并在单击事件处理程序中为软扫描按钮实现登录,以便将 TriggerType 设置为Scanner.TriggerType.SOFT_ONCE然后你调用Scanner.read()方法。您最终可以检查是否有另一个读取活动。
这是一个示例实现,您可以测试在 EMDK for Android 中包含的 Barcode API 示例中添加按钮(最新版本为 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 存储库中找到完整的示例,我在其中Soft Scan向标准 Zebra 的 EMDK Barcode API 示例添加了一个按钮。

在此处输入图像描述

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

于 2016-02-06T20:08:27.953 回答