SunmiScanner 开发及使用文档
文档更新说明 编号更新日期组件版本更新内容撰写人 1.0.0 2018/04/24 v1.1.6 原始版本 Darren 徐赟庭 1.0.1 2018/06/07 v1.1.19 增加获取扫码头类型接口 Darren Arthur - 1 -
1. 简介 类型 : 商米 L2 P2Lite 等扫码专用设备, 可用于商超, 工业, 医疗, 农贸, 执法等,L2 有两种扫码头的 NewLand: 新大陆扫码头, 支持编码见附表 1; Zebra: 斑马扫码头, 支持编码见附表 1; 扫码头是一个免开发的扫码设备, 默认侧边按键触发扫码, 有三种扫码结果的输出, 默认为模拟键盘输出 用户打开任意一个编辑框, 在扫码成功后, 会自动在编辑框输入扫码结果 如果用户需要软件触发扫码或者需要自定义扫码按键, 可以通过扫码服务提供的接口来设置 下面介绍一下与扫码服务相关的接口文档说明 ( 目前支持 aidl 的方式与服务连接 ) - 2 -
2. 连接扫码服务 (AIDL) 2.1. AIDL 简介 AIDL 是 Android Interface Definition language 的缩写, 它是一种 Android 内部进程通信接口的描述语言, 通过它我们可以定义进程间的通信接口 2.2. AIDL 使用 建立连接可分以下 5 步骤 : 1. 在项目中添加资源文件中附带的 AIDL 文件 2. 在控制扫码的代码类中实现 ServiceConnection 3. 调用 ApplicationContext.bindService(), 并在 ServiceConnection 实现中进行传递 注意 : bindservice 是非阻塞调用, 意味着调用完成后并没有立即绑定成功, 必须以 serviceconnected 为准 4. 在 ServiceConnection.onServiceConnected() 实现中, 你会接收一个 IBinder 实例 ( 被调用的 Service) 调用 IScanInterface.Stub.asInterface(service) 将参数转换为 IScanInterface 类型 5. 现在就可以调用 IScanInterface 接口中定义的方法了 绑定服务示例 : private static ServiceConnection conn = new ServiceConnection() { @Override public void onserviceconnected(componentname name, IBinder service) { scaninterface = IScanInterface.Stub.asInterface(service); Log.i("setting", "Scanner Service Connected!"); @Override public void onservicedisconnected(componentname name) { Log.e("setting", "Scanner Service Disconnected!"); scaninterface = null; ; public void bindscannerservice() { Intent intent = new Intent(); - 3 -
intent.setpackage("com.sunmi.scanner"); intent.setaction("com.sunmi.scanner.iscaninterface"); bindservice(intent, conn, Service.BIND_AUTO_CREATE); - 4 -
2.3. AIDL 接口定义说明 编号方法 1 2 3 4 void sendkeyevent(keyevent key) 自定义按键触发扫码 void scan( ) 触发开始扫码 void stop( ) 触发停止扫码 int getscannermodel() 获取扫码头类型 1. 自定义按键触发扫码 函数 :void sendkeyevent(keyevent key) 参数 : key KeyEvent 事件对应 key 的 Action 为 KeyEvent.ACTION_UP 时 : 触发开始扫码对应 key 的 Action 为 KeyEvent.ACTION_DOWN 时 : 触发停止扫码示例 : @Override public boolean dispatchkeyevent(keyevent event) { // 例 : 以 home 键作为触发扫码按键 if (event.getkeycode() == KeyEvent.KEYCODE_HOME) { scaninterface.sendkeyevent(event); return super.dispatchkeyevent(event); 2. 触发开始扫码 函数 :void scan( ) 备注 : 需要与 stop() 方法配合使用, 开始识别扫码 示例 : scaninterface.scan(); - 5 -
3. 触发停止扫码 函数 :void stop( ) 备注 : 需要与 scan() 方法配合使用, 停止识别扫码 示例 : scaninterface.stop(); 4. 获取扫码头类型 函数 :int getscannermodel( ) 返回值 : 类型 100 NONE 101 P2Lite 102-->l2-newland 103-->l2-zabra 示例 : scaninterface.getscannermodel(); - 6 -
3. 扫码头设置 3.1. 输出编码设置 默认 UTF-8 可选 UTF-8,GBK,ISO-8859-1,SHITF-JIS 3.2. 提示方式设置 默认打开声音提示和震动提示 3.3. 输出方式设置 1. 设置 默认选中模拟键盘方式输出, 默认自动补回车默认开启广播输出 - 7 -
2. 广播输出说明 监听广播 :"com.sunmi.scanner.action_data_code_received" 示例 : private static final String ACTION_DATA_CODE_RECEIVED = "com.sunmi.scanner.action_data_code_received"; private static final String DATA = "data"; private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onreceive(context context, Intent intent) { String code = intent.getstringextra(data); if (code!= null &&!code.isempty()) { mcode.settext(code); ; private void registerreceiver() { IntentFilter filter = new IntentFilter(); filter.addaction(action_data_code_received); registerreceiver(receiver, filter); - 8 -
3.4. 触发模式设置 默认短按触发扫码, 松开按键停止扫码 3.5. 识别码制设置 用户可在设置界面中选择开启或关闭制定识别码, 默认开启全部识别码 - 9 -
4. 附录 4.1. 附表 1 码制 Newland Zebra Code128 UCC EAN128 ISBT 128 EAN8 EAN13 UPC-E UPC-E1 UPC-A Interleaved 2 of 5(ITF) Matrix 2 of 5 Code39 Codabar Code93 GS1 DataBar(RSS) Composite-UCC Composite-UPC Code11 ISBN Industrial 2 of 5 Standard 2 of 5 Discrete 2 of 5(DTF) Chinese 2 of 5 Korea 3 of 5-10 -
Plessey MIS-Plessey Composite A/B Composite C ISSN EAN PDF417 QR Code Aztec DataMatrix 汉信码 MaxiCode AustralinPostal US Postnet US Planet Uk Postal Japan Postal - 11 -