特殊代码说明

一、获取商米设备标识

商米建议通过获取到以下内容来判断是否商米设备:

1.设备的品牌名 brand(如:SUNMI)

    商米的品牌名统一为 SUNMI

2.设备的系统型号 model(如:V1-B18)

    系统型号组成为 产品型号+硬件特性+‘-’+软件特性

    其中以V、M、P、L开头为手持设备,以T、D、S开头为横屏设备(截至2017年12月) 

3.设备的ROM版本号(如:1.1.0)。

4.设备的ROM顺序号(如:128)。

可以下载Demo,仿照Demo在自己项目src下面新建android.os包(固定写法),将SystemProperties.java放入该包下,按以下方法获取指定的值:

获取brand的代码为:

    String brand = SystemProperties.get(“ro.product.brand”);

获取model的方法为:

    String model = SystemProperties.get(“ro.product.model”);

获取ROM版本号的代码为:

    String versionname = SystemProperties.get(“ro.version.sunmi_versionname”);

获取ROM顺序号的方法为:

    String versioncode = SystemProperties.get(“ro.version.sunmi_versioncode”);

 二、获取设备的SN号

1.在AndroidManifest.xml中添加如下权限。

2.在需要的地方用以下代码获取商米SN号。

public static String getSN() {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            return Build.getSerial();

        } else

            return Build.SERIAL;

    }

三、隐藏及恢复底部导航栏

(注:商米新开发了Kiosk霸屏模式,APP不用做任何修改,仅通过云端设置即可实现隐藏状态栏、导航栏并无法通过手势唤出。   该功能在T2、K1设备上已实现,其他设备上线进展请联系技术支持400-666-6509(00:00~24:00,7*24小时服务)。   建议合作伙伴使用商米Kiosk霸屏模式,已获得更好的体验)

Android系统默认提供了隐藏系统的导航栏的方法,但对于Dialog的支持较差,导致全屏对话框打开时先弹出导航栏再隐藏(闪屏),SunmiOS针对此问题进行了修复(V1系统固件版本252后支持,T1系统固件版本132后支持)

1.Activity的全屏化

——安卓默认支持

public class MainActivity extends AppCompatActivity {

    @Override

    public void onWindowFocusChanged(boolean hasFocus) {

        super.onWindowFocusChanged(hasFocus);

        SystemUIUtils.setStickFullScreen(getWindow().getDecorView());

    }

}

public class SystemUIUtils {

    public static void setStickFullScreen(View view) {

        int systemUiVisibility = view.getSystemUiVisibility();

        int flags = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE

                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar

                | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

        systemUiVisibility |= flags;

        view.setSystemUiVisibility(systemUiVisibility);

    }

}

2.Dialog的全屏化

——原生系统下 AOSP 的Bug会导致全屏对话框打开时先弹出导航栏然后再隐藏导航栏(闪屏)。

public AlertDialog create(boolean fullscreen) {

    LayoutInflater inflater = LayoutInflater.from(context);

    final AlertDialog dialog = new AlertDialog(context,

            R.style.DialogStyle);

    if(fullscreen){

        SystemUIUtils.setStickFullScreen(dialog.getWindow().getDecorView());

    }

}

3.设置隐藏后显示导航栏

3.1.全局底部上划

——上划后底部导航栏显示4s,4s后底部导航栏隐藏

3.2.切换应用至其他APP(如APP内跳转至第三方应用、第三方APP弹窗等)

——切换至其他APP是否显示底部导航栏以第三方应用要求为准,切换至自己APP时底部导航栏消失

四、避免重复申请外设权限

当APP需要通过USB关联外设来实现业务时(比如连接USB打印机打印小票),安卓要求用户手动确认设备使用权限,来保障用户信息安全,防止木马非法入侵USB设备。

1.如何避免USB设备重新插拔同一个外设时,APP反复申请该外设权限

需要用户手动确认时,勾选“默认情况下用于该USB设备”,无法通过代码绕过该安全机制

验证DEMO

2.如何避免设备重启后,已勾选“默认情况下用于该USB设备”的APP仍反复申请同一个外设的使用权限

2.1.在APP的AndroidManifest中指定某个Activity部分中,添加如下代码

                

2.2.在该目录下创建xml文档

    

其中,class的值需要和要连接的外设类型一致,外设class参照表如下

    /**

     * USB class indicating that the class is determined on a per-interface basis.

     */

    public static final int USB_CLASS_PER_INTERFACE = 0;

    /**

     * USB class for audio devices.

     */

    public static final int USB_CLASS_AUDIO = 1;

    /**

     * USB class for communication devices.

     */

    public static final int USB_CLASS_COMM = 2;

    /**

     * USB class for human interface devices (for example, mice and keyboards).

     */

    public static final int USB_CLASS_HID = 3;

    /**

     * USB class for physical devices.

     */

    public static final int USB_CLASS_PHYSICA = 5;

    /**

     * USB class for still image devices (digital cameras).

     */

    public static final int USB_CLASS_STILL_IMAGE = 6;

    /**

     * USB class for printers.

     */

    public static final int USB_CLASS_PRINTER = 7;

    /**

     * USB class for mass storage devices.

     */

    public static final int USB_CLASS_MASS_STORAGE = 8;

    /**

     * USB class for USB hubs.

     */

    public static final int USB_CLASS_HUB = 9;

    /**

     * USB class for CDC devices (communications device class).

     */

    public static final int USB_CLASS_CDC_DATA = 0x0a;

    /**

     * USB class for content smart card devices.

     */

    public static final int USB_CLASS_CSCID = 0x0b;

    /**

     * USB class for content security devices.

     */

    public static final int USB_CLASS_CONTENT_SEC = 0x0d;

    /**

     * USB class for video devices.

     */

    public static final int USB_CLASS_VIDEO = 0x0e;

    /**

     * USB class for wireless controller devices.

     */

    public static final int USB_CLASS_WIRELESS_CONTROLLER = 0xe0;

    /**

     * USB class for wireless miscellaneous devices.

     */

    public static final int USB_CLASS_MISC = 0xef;

    /**

     * Application specific USB class.

     */

    public static final int USB_CLASS_APP_SPEC = 0xfe;

    /**

     * Vendor specific USB class.

     */

    public static final int USB_CLASS_VENDOR_SPEC = 0xff;

3.如何避免前两步后设置后,业务页面会因USB设备插入而刷新

安卓原生逻辑导致用户选择“默认情况下用于该USB设备”会导致USB设备插入时打开某个指定activity。如果要避免页面刷新导致业务中断,可以增加如下代码防止页面刷新。

 五、如何避免自己的应用数据被清除

应用数据默认是可以通过系统设置删除的,删除后应用将恢复刚安装的状态。但是可以通过配置APP来精细管理应用数据(比如按照业务分类或时间删除数据),也可以避免重要的应用数据被删除。

在程序的manifest文件的application中加上manageSpaceActivity属性,并且指定一个Activity,这个Activity就是点击管理空间之后会跳转的那个Activity了。

 

    

 

PS 如果要避免数据被删除,可以创建一个自动关闭的Activity。

public class ManageSpaceActivity extends Activity {  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        finish();  

    }// onCreate  

}  

六、如何避免插入usb外设导致app界面闪烁

在APP的AndroidManifest中,添加如下代码

android:configChanges=”navigation|keyboardHidden|keyboard”

七、如何避免扫描枪扫出内容与实际不一致

一般情况下,文本框输入的所有内容会提交给输入法进行转换(如拼音、联想等),有的输入法经过转换后会转义部分字词导致输入内容不一致。

除了更换系统输入法为合适的输入法外,还可以利用输入法通常不对密码框进行处理的规则,调整文本框类型为“可见密码”(inputType),并且约定好可输入规范(digits)也可以避免该问题

调试设备说明

关于商米设备调试

ADB权限申请流程:在FT1mini 在设置->开发者选项->开发者指南->输入渠道绑定的手机号->获取验证码->填入收到的验证码->授权后就可以adb调试了

(本教程仅适用于非金融设备,如需要开启Sunmi P系列设备的调试权限,请联系销售人员)

默认商米的设备插上USB线就可以调试,商米也提供了设备调试权限的控制功能,合作伙伴在后台开启调试权限控制后(如下图所示),则需要通过邮箱或手机号获取调试权限才能调试该设备。如果不能直接调试,请查看合作伙伴后台是否开启了该权限。

注:调试权限的控制只针对绑定了合作伙伴(渠道)的设备生效。

启用调试权限控制后如何调试设备

如果合作伙伴启用了’调试权限控制’,则开发者需要在旗下设备上通过邮箱和手机号获取调试权限才能调试设备,合作伙伴可以在商米合作伙伴平台添加调试员(开发者)的手机号或邮箱。以下为获取设备调试权限的歩骤:

1.添加调试员。

开发者调试设备之前请了解设备所属的渠道,可以找自己公司相关的管理人员询问。管理人员需要在商米的合作伙伴平台后台添加调试员的手机号或邮箱。

2

2.插入USB(V1s、V2、M2、L2建议暂时通过关闭云端调试保护开关来调试设备)

确保自己有调试权限的手机号或邮箱后,将设备连接电脑,建议开发者在windows下调试,如果手机能被电脑正确识别,通常会出现如下的弹窗提示:

3

如果设备没有被电脑识别,请确认是否因以下原因引起。

  • 接触不良,请多次插拔扭动USB接口确认。
  • 数据线故障,换条数据线看下能不能识别。
  • 电脑没有安装移动设备驱动,可以使用第三方工具软件安装。

3.获取验证码。

点击上面的“我要调试”项,将进入手机号或邮箱验证权限步骤,同时设备的USB调试模式将自定开启(这里是指基础的调试模式,不是权限);点击“知道了”将退出弹窗,不会开启USB调试模式。

4

4.验证权限

输入之前添加的手机号或邮箱后点击’获取验证码’,商米将向手机号或邮箱发送验证码,填入验证码点击’授权并开启调试’。

5

5.打开权限。

打开权限后,可以查看logcat中有无输出判断是否可以调试设备。

6

发布应用说明

发布应用

关于商米应用市场

每个商米合作伙伴都可以在商米官网 注册商米合作伙伴帐号,有一个自己的操作后台,原则上每一台商米的设备在卖出去的时候都会和一个合作伙伴账号绑定,商米会以合作伙伴为粒度提供部分功能和权限的控制服务。

SUNMIUI内部有一个应用市场,合作伙伴可以通过应用市场将自己的应用大规模分发到商米的设备上。默认旗下用户只能通过商米应用市场为设备安装应用。

应用市场规则

商米为部分合作伙伴分配了不同权限的应用市场,默认合作伙伴上传的应用不用商米审核就可以出现在自己的应用市场中。商米可以审核该应用,通过审核后该应用会出现在其他合作伙伴的应用市场中,当然部分合作伙伴可以选择自己的应用不出现在其他人的应用市场,也可以选择自己应用市场不出现其他人的应用,关于权限的授予可以咨询商米客服400-902-1168(每天9:00~21:00,节日除外)

应用分发流程

应用开发完成后,上传到应用市场,用户可以在设备上的应用市场搜索到应用,如果是渠道合作伙伴可以设置应用在旗下的设备自动安装。以下讲解应用首次上传分发的流程。

1.上传应用。

在 合作伙伴后台,进入”我的应用”选项,点击创建应用

2

2.填写相关内容

点击’上传安装包’,从文件夹中选择您要上传的apk,等待上传完成后,商米后台将自动分析安装包,下图绿色箭头指示部分将会自动填写好,开发者手动填写应用介绍,应用适配的设备,应用类型等信息。

  • 上传APK安装包时如果提示包名重复,则表示此APK已经在商米应用市场上架,如果此APK是贵公司所有,请联系商米客服400-902-1168(每天9:00~21:00,节日除外),进入认领。
3

3.提交应用。

合作伙伴将剩余部分内容补充完整后,下图的’提交’按钮将由灰色不可点击变成绿色可点击状态,点击’提交’将会完成应用的上传,

4

关于灰度部署

上图中’提交’按钮上方有一个’是否灰度部署’选项,勾选后提交按钮将变成’灰度部署’项,点击后将进入灰度部署配置项中。

灰度部署是商米针对合作伙伴的实际需求提供的一项功能,每台设备在使用的时候会有一个地理理位置信息,合作伙伴在开发好自己的应用适配商米的设备后,可以根据地理位置或者SN号在部分设备上部署,只有灰度部署范围内的设备的应用市场中才会出现该应用。在小范围的灰度部署后,开发者可以将应用部署到全范围设备上。

5

设置自动安装。

如果希望上传的应用自动在旗下所有设备上安装,可以在’我的应用市场’项中设置该应用为自动安装应用(如下图箭头所示),旗下设备在收到推送通知后会自动下载安装该应用,设置自动安装后还可以设置该应用是否作为默认启动应用(如下图箭头所示),设备开机后将自动启动该应用。

6

更新应用

在应用通过商米审核后,在我的应用中列表项中会有’更新’按钮,开发者可以发布该应用的升级包。点击后进入更新应用页,更新的流程和发布流程类似,请参照上面的发布流程。

  • 上传更新包的时候如果提示签名异常,请检查APK签名是否与原来的安装包不一致。如确认是需要变更签名,则请删除应用后再创建应用
  • 上传更新包的时候如果提示包名不一致,请检查APK包名是否有变动或有没有上传错误。如确认是需要变更包名,则请删除应用后再创建应用
7

常见问题和帮助

开发常见问题

阅读指引

为了更快地在机具上完成收银应用开发,以及加快刷脸应用和iot sdk的集成联调开发,机具端侧开发过程中的问题汇总如下。

FT1 MINI硬件调试开发

Q:ISV开发测试建议

A:由于团餐场景的特点,就餐速度快,排队人数多,付费过程快等因素。建议ISV根据实际场景和环境对设备和软件进行相关的压测,实际场景会有很多刷脸的状况和意外情况,所以请ISV务必进行压测,尽量将问题暴露在压测阶段。做过压测后无问题再投入市场使用。

Q:设备如何进行adb调试连接?

A:  推出FT1 MINI设备键盘,拆开维保码下面的防水盖,插入micro USB口连接FT1 MINI和PC机。 不支持debug调试,需要打印日志方式调试。在adb调试过程中,确保RJ45和键盘USB没有插入。

Q:如何排查深度摄像头硬件是否工作正常?

A:在FT1 MINI应用列表界面,点击”MarioSdk“图标进入摄像头工厂模式界面,再点击”D2C测试“按钮,查看摄像头预览界面是否正常。如果有类似马赛克的界面则初步判断正常,参考画面如下:

Q:如何排查键盘不响应?

A:第一步:确认是否延长线断裂不通,可以将键盘不用延长线插入机器尝试确认。

第二步:不用延长线直接插入键盘,可以进入CIT模式做单体测试(在FT1 MINI应用列表界面点击CIT图标),确认键盘是否不良。

第三步:更换键盘再确定机器USB是否通路,用U盘或鼠标测试确认。如不通,报修或更换整机。

Q:如何排查NFC不能正常工作?

A:进入设置界面,看NFC 的设置开关是否可以正常打开、关闭。要确认NFC设置为“打开”状态。合作方对NFC的监听应用需要独立于机具的收银应用工作,NFC的开发采用标准的android NFC开发原理。

Q:机器长时间运行状况,是否连续数天处于不关机状态?

A:如无人为关机行为,建议客户设置定时开关机,连续数天不关机可能造成机器长时间老化导致卡顿,延迟,寿命缩短等问题。

Q:机器开机默认霸屏模式,如何退出霸屏模式

A:同时按下键盘上 “功能”+“+”+“设置”即可退出霸屏模式。

Q:键盘外置的情况下,安装建议?

A:键盘外置时,需要连接延长线,建议在接头位置包裹绝缘胶带以起到放松防水作用。

Q:键盘套使用

A: 我们的键盘具有IP55级别防尘放水,并使用的防油污材料。但是由于食堂环境油污严重,环境复杂,后期我们将随设备配套键盘保护套,请在安装时同步装上键盘保护套。防止油污进入键盘,影响键盘使用。

Q:频繁刷脸运行后,设备卡顿,设备反应慢,频繁发生。

A:有以下两种可能原因,需要客户自查。

1,可能原因:线程操作有问题,频繁调用smile 导致smile 发生ANR,客户的APP 一直在等待,导致界面卡死,出现白屏、黑屏。建议客户不要在主线程有过多的耗时操作,后续客户修改逻辑正常。

2、可能原因2 :APP 也是频繁操作,导致资源没有来得及释放,出现内存泄漏导致机器卡顿,重启APP正常,建议客户:适当优化释放时间,后正常。

Q:副屏显示设置建议。

A:建议副屏显示设置的文字越大越好,对比度越大越好,利于食堂阿姨能够更清晰的看到消费金额。

Q:排插选型

A:由于我们使用的是插墙式的适配器,适配器本体比较宽,所以建议客户选宽间距的排插。窄间距的排插利用率较低。适配器宽度尺寸为51*51mm。

Q:键盘不响应。

A:偶然出现,建议重新插拔键盘或者重启设备。

   出现概率比较高的情况,如何排查键盘不响应

1、确认是否延长线断裂不通,可以将键盘不用延长线插入机器尝试确认。

2、不用延长线直接插入键盘,可以进入CIT模式做单体测试(在海马应用列表界面点击CIT图标),确认键盘是否不良。

3、更换键盘再确定机器USB是否通路,用U盘或鼠标测试确认。如不通,报修或更换整机。

Q:设备用有线网络的话,对网线种类有要求吗?用无线网路的话,对无线路由器有要求吗?

A:设备需要稳定的网络,要求采用国标超五类及以上的网线或者企业级无线路由器。

Q:设备的安装方式

A:设备配有标准滑入式挂架,可以吊装,左装,右装,贴合玻璃,配合桌面支架安装(桌面支架需要单独购买)。安装方式详情请参考开发指南的安装指引。

Q:设备安装高度是多少?

A:根据设备安装点位最大程度贴近学校平均身高即可。

   参照平均身高选择安装高度(摄像头距地面的距离)。

高度角度身高范围(距离60cm) 
1400125(最低)175(最高)
1500135(最低)185(最高)
1600145(最低)195(最高)

假设安装高度160cm的话, 覆盖145~195cm 身高人群。如果是上下垂直调整的话, 就直接相减即可。比如安装高度下降30cm至 130cm的位置, 则覆盖身高变为115~165cm。如果离得更近,那身高范围会缩小一些。以上是理论计算, 实际测试会比这个范围大。

Q:摄像头无法识别人脸。

A:在FT1 MINI应用列表界面,点击”MarioSdk“图标进入摄像头工厂模式界面,再点击”D2C测试“按钮,查看摄像头预览界面是否正常。如果有类似马赛克的界面则初步判断正常(参考图如下),如显示正常,请在联网状态下打开smilepay软件,选项—正式环境—刷脸,如刷脸正常,即可判定摄像头为正常。需要从软件方向寻找问题原因。

如以上检查无法正常刷脸或者深度读取不正常,可判定摄像头不良,需走售后流程安排维修或者换机。

Q:如何进行设备单项功能测试

A:设备应用界面—点 CIT—选择  单项测试—进行判断可能问题的单项测试。

接口使用说明

如何找到接线口:

  第一步:在机器背面,如红色箭头方向所示,从左向右推出接线盖。

  第二步:从左向右推出键盘。

   第三步:看到两个防水密封盖A和B。

  第四步:用十字螺丝刀拆除3颗螺丝后,打开防水盖。

  第五步:打开后出现3个外设I/O口,分别是RJ45、USB2.0*2。

  说明:如果网线无法插入现有机器网口,请使用随机网线转接线接入网络。

安装建议

安装方案一:直接安装在橱窗侧壁

 a. 从包装盒中取出挂机架,挂架有12个M4螺丝通孔和2个M3螺牙孔

 b. 用手枪钻在橱窗侧壁打4个M4的螺牙孔(或者自攻孔)

     取出包装中的4颗M4机牙螺丝或者准备4颗M4自攻螺丝

     将挂架固定在橱窗侧壁,确保挂架能够完全固定 

 c. 将准备好的团餐机器插入挂机,支架固定的方向不同,机器的插入方向不同。均可以插入。

 d.将包装中的黑色M3螺丝取出,装入箭头位置。锁上螺丝后,机器将无法从挂架上滑出,确保机器的使用。 

安装方案二:直接粘在橱窗玻璃上

  1. 从包装盒中取出整机挂架,同时预备双面胶和玻璃胶

 b. 将挂架贴在玻璃外面

     (1)先将挂架固定在玻璃橱窗上

     (2)挂架四周打玻璃胶

     (3)静置24小时 

 c. 按照如上(1)、(2)、(3)、(4)步骤将键盘取出,并装上键盘延长线和键盘盖 

d. 保证挂架静置24小时后,将机器划入挂架,并锁上M3螺丝防止机器向外滑动,键盘可以放在桌面上使用 

安装方案三:通过转接架安装在橱窗

a. 从包装盒中取出整机挂架和M4螺丝螺母,将转接角件与挂架固定在一起,转接角件需单独采购,商米可以提供。

 b. (1)用手枪钻在橱窗正面壁打M4的螺牙孔(或者自攻孔)

     (2)将挂架固定在橱窗正面,确保挂架能够完全固定 

 c. 将准备好的团餐机器插入挂机。支架不定的方向不同,机器的插入方向不同。均可以插入。 

 d. 将包装中的黑色M3螺丝取出,装入箭头位置。锁上螺丝后,机器将无法从挂架上滑出。确保机器的使用。

第三方收银

设备灯光开发接口

/sys/class/leds/LedRed/brightness 写入0 关闭红灯 写入1打开红灯

/sys/class/leds/LedBlue/brightness 写入0 关闭蓝灯 写入1打开蓝灯

/sys/class/leds/LedYellow/brightness 写入0 关闭黄灯 写入1打开黄灯

可以间隔打开&关闭灯光接口来模拟灯光闪烁

操作建议: 操作灯前要关闭其他的灯

双屏控制接口

开发参考资料

https://developer.android.google.cn/reference/kotlin/android/app/Presentation

https://blog.csdn.net/liqianwei1230/article/details/78606935

https://www.jianshu.com/p/d42f3ec6e451

键盘控制接口

键值定义说明

keyKEY_EVENTKey code
1KEY_KP1KEYCODE_NUMPAD_1 = 145
2KEY_KP2KEYCODE_NUMPAD_2 = 146
3KEY_KP3KEYCODE_NUMPAD_3 = 147
4KEY_KP4KEYCODE_NUMPAD_4 = 148
5KEY_KP5KEYCODE_NUMPAD_5 = 149
6KEY_KP6KEYCODE_NUMPAD_6 = 150
7KEY_KP7KEYCODE_NUMPAD_7 = 151
8KEY_KP8KEYCODE_NUMPAD_8 = 152
9KEY_KP9KEYCODE_NUMPAD_9 = 153
0KEY_KP0KEYCODE_NUMPAD_0 = 144
.KEY_KPDOTKEYCODE_NUMPAD_DOT = 158
+KEY_KPPLUSKEYCODE_NUMPAD_ADD = 157
KEY_UPKEYCODE_DPAD_UP = 19
KEY_DOWNKEYCODE_DPAD_DOWN = 20
功能KEY_F1KEYCODE_F1 = 131
设置KEY_F2KEYCODE_F2 = 132
取消KEY_ESC111/4
删除KEY_BACKSPACEKEYCODE_DEL = 67
确认KEY_ENTERKEYCODE_NUMPAD_ENTER = 66

由于FT1 MINI硬件设计,调试线与键盘USB线无法同时工作,因此当需要调试键盘相关的应用时,请使用adb无线调试。

说明

1、本小键盘设计上相当于正常PC键盘的小键盘部分,如下图;因此,要发送键盘上的键值,需要先开启Numlock,而FT1MINI机具上小键盘上无Numlock按键,系统会默认在按键时自动触发KEY_NUMLOCK对应的键值消息;

2、取消键发了两个keycode对应是KEYCODE_BACK=4和KEYCODE_ESCAPE=111
3、按键响应事例代码如下:
在onKeyUp方法中做相关响应处理:

刷卡应用开发接口

NFC控制接口

NFC接口采用Android系统标准接口,使用方法和说明,请见链接:

https://developer.android.google.cn/guide/topics/connectivity/nfc

https://www.android-doc.com/guide/topics/connectivity/nfc/nfc.html

开发参考资料,请见链接:

Android NFC功能 简单实现:https://www.jianshu.com/p/cf36c214f2a8

Android应用开发接口

开始之前:因某些接口调用耗时存在不确定性,建议不要在UI线程调用,否则可能导致ANR卡顿。

打印机应用开发接口

设备支持外接USB打印机,即插即用。USB打印机的接口,参考Android系统的标准接口开发,可以搜索“Android USB打印机开发”关键词查询如何开发调用。

如果选择支付宝的云打印机,相关的开发指南有:https://alipay.open.taobao.com/docs/doc.htm?articleId=118376&docType=1

如果接入的是商米自有的打印机,相关的开发指南有:http://sunmi-ota.oss-cn-hangzhou.aliyuncs.com/DOC/resource/re_cn/外置打印机/Sunmi外接打印机开发者文档.pdf

支付开发介绍

产品支持刷脸、扫码和刷卡三种身份识别介质,身份识别出来后,由ISV根据自己的业务逻辑完成收银的端到服务侧处理。

刷脸支付开发 

刷脸支付支持:在线人脸识别。

在线人脸识别方案的刷脸支付开发

用户在支付宝app完成刷脸开通后,商家在设备上输入金额,用户刷脸成功识别后用户点击确认,商家收银服务端发起收单请求扣款。

在线人脸识别的刷脸方案,请见如下链接:https://opendocs.alipay.com/open/20180402104715814204/intro

扫码支付开发

商家在设备上输入金额,用户点击设备上“扫码支付”按钮后,将手机上支付宝app的付款码展示到摄像头前方,完成识别扣款。 

支持“支付宝二维码”、“数字码”、“所有类型”等3种扫码模式。模式设置逻辑如下:

  1. 二维码功能默认支持“所有类型”二维码
  2. 根据业务要求可配置识别码类型, “仅识别支付宝二维码”、“识别数字码”、“识别所有类型二维码”

扫码支付快速接入,请见如下链接:

https://opendocs.alipay.com/open/194/106078

刷卡支付开发

设备支持NFC非接触卡的读取和写入,支持的规范有:

  • 支持13.56MHz频段(ISO14443A / B,ISO15693 MIFARE读/写模式等),识读兼容市面上常见的各类校园卡(逻辑加密卡、智能卡等如:M1卡、CPU卡等)。识读距离:0-5cm。
  • PSAM卡:支持内置接触式读写模式,支持IOS7816-1/2/3/4协议,符合《中国金融集成电路(IC卡)PSAM卡规范》。PSAM卡不支持热插拔。

ISV可以根据客户的需求配置相应的卡片和写卡的设备,也可以兼容现有团餐实体卡,读写卡的程序建议以一个区别于收银apk的常驻内存的应用控制。设备出厂不标配PSAM卡。

产品介绍

1. 产品介绍

1.1 产品适合场景

适用于校园、园区、社区、企事业单位的食堂和餐厅的消费支付。提供商户一款集刷脸、扫码、刷卡一体的智能收银受理设备,ISV可以在这款设备上进行二次开发,满足商户的个性化结算需求。

1.2 产品特点

  • 高准确性:刷脸识别,百万分之一错误率,远低于指纹
  • 高安全性:独有活体技术,拦截各种伪造攻击
  • 高稳定性:蚂蚁金融云架构,高可用、动态可扩展,峰值2000TPS
  • 极致体验:快速刷脸识别,秒级验证通过
  • 高扩展性:USB打印机,扫码枪,扫码盒即插即用

      键盘可分离、防油污材料、IP55防水等级、V0防火等级、脸码卡一体 


1.3 产品规格

参数内容
处理器高通骁龙SDM450 8核处理器
操作系统Android 8.1 64bits 操作系统
存储器16 GB ROM+2 GB RAM
主显示屏(客屏)主屏7”IPS, 600 x 1024,电容式多点触控
副显示屏(操作屏)副屏4.0” IPS  480 x 800
通信方式4G 国内全网通,4G为选配版本
WiFi2.4GHz
蓝牙支持蓝牙2.1+EDR/3.0/4.0 LE/4.2 BLE
非接卡支持NFC非接卡,支持13.56MHz频段,识读距离:0-5cm。
PSAM卡:支持内置接触式读写模式,支持IOS7816-1/2/3/4协议
人脸识别内置式,蚂里奥S1,MIPI接口
指示灯红、黄、蓝三色LED指示灯
外置键盘19键型 USB HID外置式键盘
按键电源键(锁屏键),隐藏按键3个(音量+/-以及开机键)
喇叭1x 3W密闭大喇叭
外部接口1x RJ45 100M 网口;1x DC-IN电源接口,2x USB Type A口;1x Micro USB调试口
产品安装支持金属支架
电源适配器DC 12V/2A,1.5m插墙式
尺寸209.2*129*36.3mm(不包含支架,不含按键高度)
工作环境工作温度:-10°C–50°C    储藏温度:-20°C–70°C,湿度要求:5%-95%
支架金属侧壁安装支架
配件1.5m USB延长线,RJ45网络延长线,键盘盖,螺丝

1.4 硬件接口

设备支持3个接口:RJ45网口、USB2.0*2。同时支持Micro USB和PSAM卡槽。

说明:Micro USB接口使用时不能和RJ45网口/USB口同时使用。

具体接口,请见文档: 接口使用说明

2. 产品运维

2.1 安装部署

  • 设备注册激活必需要有访问外网的IP网络。
  • 注册激活的设备关机后,再开机务必保证设备有网络物理连接。
  • 避免强光干扰,影响识别效果。
  • 地面布置“识别最佳点位”指引线。 

2.2 安装方式

五种安装方式:左侧挂式安装、顶部挂式安装、右侧挂式安装、玻璃挂式安装、台式支架安装。

具体安装方案,请见文档: 安装建议

2.2 安装高度

参照平均身高选择安装高度(摄像头距地面的距离)。

高度角度身高范围(距离60cm)
1400125(最低)175(最高)
1500135(最低)185(最高)
1600145(最低)195(最高)

假设安装高度160cm的话, 覆盖145~195cm 身高人群。如果是上下垂直调整的话, 就直接相减即可。比如安装高度下降30cm至 130cm的位置, 则覆盖身高变为115~165cm。如果离得更近,那身高范围会缩小一些。以上是理论计算, 实际测试会比这个范围大。

2.3 系统升级

为保障支付的稳定和延续性,在系统和应用检测到有新的版本可升级时,需要现场工作人员手动点击更新。

2.3.1 版本历史

版本号发布说明
 1.0.5/37  适配刷脸APK
  

2.3.2 升级方法

2.3.2.1 查看固件版本号&升级信息

『设置』-『系统』-『关于设备』-『系统升级』

2.3.2.2 版本号说明

当前版本:即当前系统的版本号信息

升级版本:即将被升级的版本号信息;

2.3.2.3 升级操作说明

  1. 如有版本更新,在『系统升级』菜单项会提示,『升级版本』;
  2. 点击后进入到『系统升级』弹出框界面,『升级版本』信息会有如下提示
  3. 『暂无可用版本』:表示无更新;
  4. 『正在下载中..』:表示正在下载升级包,先退出系统设置,过5分钟后再查看相关信息;
  5. 『下载已完成,请点击升级』:表示版本已下载完成,同时右下角会出现『确认』按钮,如点击『确认』,则再20秒后重启并直接进行升级;否则,不进行任何升级操作。

2.4 售后维保

设备出现故障,可以通过报修小程序进行报修服务,根据商米的售后维保政策享受售后服务。