Android开发丶HoneyWell设备的二维码扫描实现

前一段时间做了个项目,功能是要求在honeyWell设备上实现二维码扫描的功能,那么有人会问了,这设备是干嘛的,和Android有什么关系,其实这种设备也搭载了Android系统,因此我们可以把Android app安装到该设备上,并且该设备会有专用的扫描枪,主要用于仓库物流相关的事宜,无奈网上相关的资料实在太少了,官网打不开,文档是英文,好在经过一番摸索,最后找到了能用的资源SDK,话不多说,步骤如下

1.首先把jar包集成进去

Android开发丶HoneyWell设备的二维码扫描实现_第1张图片

2.打开清单文件,配置扫描权限。

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下载地址:

资源下载

你可能感兴趣的:(Android)