前一段時間做了個項目,功能是要求在honeyWell設備上實現二維碼掃描的功能,那麼有人會問了,這設備是幹嘛的,和Android有什麼關係,其實這種設備也搭載了Android系統,因此我們可以把Android app安裝到該設備上,並且該設備會有專用的掃描槍,主要用於倉庫物流相關的事宜,無奈網上相關的資料實在太少了,官網打不開,文檔是英文,好在經過一番摸索,最後找到了能用的資源SDK,話不多說,步驟如下
1.首先把jar包集成進去
2.打開清單文件,配置掃描權限。
<uses-permission android:name="com.honeywell.decode.permission.DECODE" />
3.回到Acitivity,進行設備的初始化。
/** * 配置掃描槍 */ private void initScan() { //第一步:獲取掃描資源,設置掃描參數,開啓掃描功能 AidcManager.create(this, new AidcManager.CreatedCallback() { @Override public void onCreated(AidcManager aidcManager) { manager = aidcManager; barcodeReader = manager.createBarcodeReader(); try { //設置掃描參數 barcodeReader.setProperty(BarcodeReader.PROPERTY_CODE_128_ENABLED, true); //開啓Code128碼制 barcodeReader.setProperty(BarcodeReader.PROPERTY_EAN_13_ENABLED, false); //關閉EAN13碼制 barcodeReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE, BarcodeReader.TRIGGER_CONTROL_MODE_CLIENT_CONTROL); //設置手動觸發模式 barcodeReader.claim(); //開啓掃描功能 } catch (Exception e) { e.printStackTrace(); } //第二步:添加側面掃描鍵事件監聽和條碼事件監聽 barcodeReader.addTriggerListener(MainActivity.this); barcodeReader.addBarcodeListener(MainActivity.this); } }); }
4.讓Activity實現這兩個接口 BarcodeReader.TriggerListener, BarcodeReader.BarcodeListener
重寫三個方法。
//第三步:實現條碼事件和側面掃描鍵觸發事件 @Override public void onBarcodeEvent(BarcodeReadEvent barcodeReadEvent) { String barcodeData = barcodeReadEvent.getBarcodeData(); //獲取掃描數據 } @Override public void onFailureEvent(BarcodeFailureEvent barcodeFailureEvent) { } @Override public void onTriggerEvent(TriggerStateChangeEvent triggerStateChangeEvent) { if (triggerStateChangeEvent.getState() == true) { try { barcodeReader.light(true); //開啓補光 barcodeReader.aim(true); //開啓瞄準線 barcodeReader.decode(true); //開啓解碼 } catch (Exception e) { Toast.makeText(this, "開啓掃描失敗", Toast.LENGTH_SHORT).show(); } } else if (triggerStateChangeEvent.getState() == false) { try { barcodeReader.light(false); //關閉補光 barcodeReader.aim(false); //關閉瞄準線 barcodeReader.decode(false); //關閉解碼 } catch (Exception e) { Toast.makeText(this, "關閉掃描失敗", Toast.LENGTH_SHORT).show(); } } }
5.在Activity的生命週期裏配置代碼。
//第四步:資源的釋放與恢復 @Override protected void onResume() { super.onResume(); if (barcodeReader != null) { try { barcodeReader.claim(); //開啓掃描功能 } catch (Exception e) { Toast.makeText(this, "開啓掃描失敗", Toast.LENGTH_SHORT).show(); } } } @Override protected void onPause() { super.onPause(); if (barcodeReader != null) { barcodeReader.release(); //釋放掃描資源 } } @Override protected void onDestroy() { super.onDestroy(); if (barcodeReader != null) { barcodeReader.removeBarcodeListener(this); barcodeReader.removeTriggerListener(this); barcodeReader.close(); } if (manager != null) { manager.close(); } }
6.現在給設備安裝app,按下設備的掃描鍵,就可以打開掃描儀掃描了。
在onBarcodeEvent方法裏獲取到掃描的數據。
7.那麼問題來了,如果我們不想通過設備的掃描鍵掃描,而是通過我們自己內部控件的點擊監聽呢?
給界面繪製一個button,設置點擊監聽。
findViewById(R.id.main_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { barcodeReader.light(true); //開啓補光 barcodeReader.aim(true); //開啓瞄準線 barcodeReader.decode(true); //開啓解碼 } catch (Exception e) { e.printStackTrace(); } } });
搞定,值得一提的是,如果是常規的Android設備,我們可以在上面的try catch異常中設置打開zxing掃描功能,從而實現多端適配。
demo下載地址: