商米机自助收银说明

简介

本人公司最近使用到商米机设备,但是网上参考资料有限,官网文档的资料比较陈旧,有不少坑点,结合自身使用情况,对商米机的基本调试进行说明.以下以K1型号自助收银机为例

K1自助收银机

挂壁式无人收银机,我使用到的是USB扫码台样式的,还有一种串口式的.USB式的只能获取扫码信息,不能发送指令:

  1. 扫码台说明;
  2. 内置打印机说明

扫码台说明

·USB 扫码台相当于 USBkeyboard 键盘,只支持数据接收。接收方式有如下 2 种:
1.系统默认“模拟键盘输出”
直接用 dispacthKeyEvent 进行数据接收即可。
2.设置为“广播输出”
此模式下类似于串口扫码台,数据不会像键盘模式那样输出到 APP 页面中的输入
框内;此时须用广播方式接收数据,与如下“串口扫码台”一致。
设置方式:
法 1:在设备的“设置”->“扫码与键盘”中修改为“不输出”+“广播输出”。
法 2 在代码设置(建议):
action:com.sunmi.scanner.ACTION_BAR_DEVICES_SETTING

字段说明: key 解释 字段类型(*必传字段) *name:设备名--String(可为空 String-"";name/pid/vid 可在“设置”->“扫码与 键盘”中查看) *pid:扫码枪-产品识别码(PID)--Integer *vid:扫码枪-供应商 ID(VID)--Integer *type:是否是扫码枪--Integer toast:是否显示调试 Toast 提示--Boolean 默认:false

type 类型说明: 0-->键盘(默认) 1-->扫码枪,直接到 UI(KeyEvent) 2-->扫码枪,不直接到 UI(广播模式) 3-->扫码枪,加速模式(copy,需要 1.0.18)

坑点 :1.USB扫码台不支持发送指令,而且扫码灯常亮,需要自己添加开关防止多扫,
2.获取扫码回调的code 是以一串数字+"\n"的形式返回,导致打log的时候看不出来,但是数据处理就是错误,打断点调试的时候就会发现.

示例(设置某设备为广播输出):

设置设备为广播输出的示例

Intent intent = new Intent();
// ACTION_BAR_DEVICES_SETTING == "com.sunmi.scanner.ACTION_BAR_DEVICES_SETTING"
        intent.setAction(ACTION_BAR_DEVICES_SETTING);
        //name/pid/vid 可在“设置”->“扫码与键盘”中查看
        intent.putExtra("name", "Synmbol Bar Code Scanner.");
        intent.putExtra("pid", 4608);
        intent.putExtra("vid", 1504);
        intent.putExtra("type", 2);
        intent.putExtra("toast", true);
        sendBroadcast(intent);

监听扫码回调示例


 private void registerAddGoodsReceiver() {
        IntentFilter filter = new IntentFilter();
        //注意:监听回调的广播和设置广播输出不一样
        filter.addAction("com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED");
        registerReceiver(mAddGoodsReceiver, filter);
    }
  //上面有提到USB扫码台只能获取数据,不支持发送指令,因此扫码会常亮,需要自己设置开关防止多扫出现
    /**
     * 自定义扫码标记,防止多扫
     */
    boolean isScaning = false;
    private BroadcastReceiver mAddGoodsReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String code = intent.getStringExtra(DATA);
            if (code != null && !code.isEmpty() && !isScaning) {
              //注意!这里有个大坑,code是一组数字后面会加上"\n",需要自己进行处理
                String[] final_code = code.split("\\n");
                LogUtil.e(final_code[0]);
                isScaning = true;
                //TODO
                //拿到结果进行操作  
                isScaning = false;
            }
        }
    };

K1 内置打印机说明

打印方式使用Aidl方式,文档可以在开发文档
导入文档后有几个小坑点:
1;aidl放置位置
aidl的位置可以看下文档里的包路径
2.需要导入基础包
容易遗漏,导致报错
aidl使用 文档里有,可以参照文档来,这里就是帮大家说明了几个容易遗漏的点

补充

1.获取当前设备pid vid 等信息

  HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();

        for (UsbDevice usbDevice:deviceList.values()){
            LogUtil.e("usbDevice="+usbDevice);
        }

mProductId —pid
mVendorId — vid
mProductName — name

2.去掉扫码返回数据的后缀方法:
1.软件中做处理;
2.手动扫配置码,关掉后缀(需要联系有关人员获取)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值