Android開發丶HoneyWell設備的二維碼掃描實現

前一段時間做了個項目,功能是要求在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下載地址:

資源下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章