2016-02-05 43 views
0

我们有一个自定义扫描器来扫描条形码,它使用的是SOFT触发器(使用应用按钮),通过使用Motorola的emdk库。带有硬触发器和软触发器的条码扫描EMDK

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

回答

0

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

Scanner.TriggerType控制Zebra Android设备上的条形码扫描器的激活方式,通常您可以将其设置为Hard(按下硬件触发按钮激活扫描)或Soft(只要您拨打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 Barcode API示例添加了Soft Scan按钮。

enter image description here

所有数据用相同的数据监听器接收。

+0

bContinuousMode是什么?也'AsyncUiControlUpdate()'是强制性的?不幸的是,这不适合我。 – Dineshkumar

+0

嗨Dinesh,正如我写的,这个函数符合Zebra的EMDK v4.0条码API示例。 'bContinousMode'是示例应用程序中的一个标志,一旦读取了条形码,它就会重新激活扫描仪。 'AsyncUIControlUpdate()'是必须的,因为来自Barcode API的回调不能保证在UI线程上。 – pfmaggi