2016-02-05 161 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