前一段时间做了个项目,功能是要求在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下载地址: