Honeywell霍尼韦尔Android系统扫码枪集成指北

1,261 阅读1分钟

前言

近期接到一个需求,需要用到Honeywell扫码枪,读了官方源码后,进行一个小总结。

步骤

  • 1.添加依赖

将官方提供的DataCollection.jar放入libs 点此下载DataCollection.jar

  • 2.manifest注册
<!-- honeywell扫描枪 -->
<uses-permission android:name="com.honeywell.decode.permission.DECODE" />

** 一定要操作这一步,不然无法获取权限进行扫码 **

  • 3.Activity关键代码

需实现2个接口

BarcodeReader.BarcodeListener
BarcodeReader.TriggerListener

初始化

    //honeywell
    AidcManager aidcManager;
    BarcodeReader barcodeReader;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initAidcManager();
    }
    
	private void initAidcManager() {
        AidcManager.create(this, manager -> {
            //创建AidcManager和BarcodeReader对象
            aidcManager = manager;
            barcodeReader = aidcManager.createBarcodeReader();

            //设置扫描属性,打开扫描功能,按需设置码的格式
            try {
                barcodeReader.setProperty(BarcodeReader.PROPERTY_CODE_128_ENABLED, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_GS1_128_ENABLED, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_QR_CODE_ENABLED, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_CODE_39_ENABLED, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_DATAMATRIX_ENABLED, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_UPC_A_ENABLE, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_EAN_13_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_AZTEC_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_CODABAR_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_INTERLEAVED_25_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_PDF_417_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_CODE_39_MAXIMUM_LENGTH, 10);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_CENTER_DECODE, true);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_NOTIFICATION_BAD_READ_ENABLED, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_DATA_PROCESSOR_LAUNCH_BROWSER, false);
                barcodeReader.setProperty(BarcodeReader.PROPERTY_TRIGGER_CONTROL_MODE,
                        BarcodeReader.TRIGGER_CONTROL_MODE_CLIENT_CONTROL);

                barcodeReader.claim();    //打开扫描功能
            } catch (Exception e) {
                GraceToast.shortToast("修改属性失败");
            }

            //注册Trigger监听器和Barcode监听器
            barcodeReader.addTriggerListener(MainActivity.this);
            barcodeReader.addBarcodeListener(MainActivity.this);
        });

    }

数据处理

	private String = barcodeData;

	@Override
    public void onBarcodeEvent(BarcodeReadEvent barcodeReadEvent) {
        barcodeData = barcodeReadEvent.getBarcodeData();//获取扫描数据
        //如果涉及联网操作,最好开一个线程来做这件事
        new WorkThread().start();
    }

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == COMPLETED) {
                //todo something
            }
        }
    };

    //工作线程  
    private class WorkThread extends Thread {
        @Override
        public void run() {
            //......处理比较耗时的操作  
            //处理完成后给handler发送消息  
            Message msg = new Message();
            msg.what = COMPLETED;
            handler.sendMessage(msg);
        }
    }

扳机事件

    @Override
    public void onTriggerEvent(TriggerStateChangeEvent triggerStateChangeEvent) {
        try {
            barcodeReader.light(triggerStateChangeEvent.getState());//补光
            barcodeReader.aim(triggerStateChangeEvent.getState());//瞄准线
            barcodeReader.decode(triggerStateChangeEvent.getState());//解码
        } catch (Exception e) {
            GraceToast.shortToast("开关扫描功能失败");
        }

    }

复写方法,及时回收和打开

	@Override
    protected void onDestroy() {
        super.onDestroy();
        if (barcodeReader != null) {
            try {
                barcodeReader.removeTriggerListener(this);
                barcodeReader.removeBarcodeListener(this);
                barcodeReader.close();
                aidcManager.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (barcodeReader != null) {
            try {
                barcodeReader.claim();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (barcodeReader != null) {
            try {
                barcodeReader.release();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }