商米提供一个简易App来展示如何使用副屏,扫码,打印,电子秤,人脸支付等功能。支持台式收银系列(除T1,T1Mini),手持非金融系列,电子秤系列,K1
酒店自助发卡demo,包含身份证读取,发卡,指示灯控制
2.0.0 增加支付开关,增加自动安装支付宝刷脸支付app,合并版本
由于使用了GreenDao,下载使用时需要build一下生成daomaster和daosession
T1设备请参考开发者文档上T1目录下的内容,这里不做介绍
参考代码在s 和main目录下
使用支付宝刷脸支付时,需使用商米收银台实现刷脸功能,具体请联系商米客服。
商米双屏设备分 15.6寸大屏和10寸小屏,其中15.6寸副屏支持触控。有且仅当副屏为Presentation显示时才能获取触控。
双屏使用的是Presentation类来实现双屏异显。
创建一个类继承 Presentation
public class TextDisplay extends Presentation { // something }
public Display getPresentationDisplays() { DisplayManager mDisplayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); displays = mDisplayManager.getDisplays(); for (int i = 0; i < displays.length; i++) { Log.e(TAG, “屏幕” + displays[i]); if ((displays[i].getFlags() & Display.FLAG_SECURE) != 0 && (displays[i].getFlags() & Display.FLAG_SUPPORTS_PROTECTED_BUFFERS) != 0 && (displays[i].getFlags() & Display.FLAG_PRESENTATION) != 0) { Log.e(TAG, “第一个真实存在的副屏屏幕” + displays[i]); return displays[i]; } } return null; }
textDisplay = new TextDisplay(this, getPresentationDisplays()); textDisplay.show();
既可实现在副屏显示页面
商米打印服务是使用AIDL自行研发,其中 k1系列的打印服务和台式的有些许不同,连接方式如下
private void connectKPrintService() { Intent intent = new Intent(); intent.setPackage(“com.sunmi.extprinterservice”); intent.setAction(“com.sunmi.extprinterservice.PrinterService”); bindService(intent, connService, Context.BIND_AUTO_CREATE); } private ServiceConnection connService = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { extPrinterService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { extPrinterService = ExtPrinterService.Stub.asInterface(service); } };
在gradle中
dependencies { implementation’com.sunmi:printerlibrary:1.0.5’ }
兼容以前的aidl方式
private SunmiPrinterServicewoyouService = null;//商米标准打印打印服务 //连接打印服务 private void connectPrintService(){ try{ InnerPrinterManager.getInstance().bindService(this, innerPrinterCallback); } catch(InnerPrinterExceptione) { e.printStackTrace(); } } private InnerPrinterCallbackinnerPrinterCallback = new InnerPrinterCallback() { @Override protected void onConnected(SunmiPrinterServiceservice){ woyouService=service; } @Override protected void onDisconnected(){ woyouService=null; } };
推荐使用Sunmi收银台聚合支付。
demo中只提供基础交易方式
PayMentPayPresenter payMentPayPresenter = new PayMentPayPresenter(mContext);
payMentPayPresenter.init(callback);
payMentPayPresenter.startFaceService(orderId, phoneNumber,money);
payMentPayPresenter.startPayCode(orderId, qrCode ,money);
payMentPayPresenter.destoryReceiver();
public class ResultReceiver extends BroadcastReceiver { private static final String TAG = “ResultReceiver”; @Override public void onReceive(Context context, Intent intent) { if (“sunmi.payment.action.result”.equals(intent.getAction())) { String responseStr = intent.getStringExtra(“response”); Log.e(TAG, “response = “ + responseStr); final PaymentResponse response = JSON.parseObject(responseStr, PaymentResponse.class); if (“T00”.equals(response.resultCode)) { aliResultCallback.onSuccess(response); } else { aliResultCallback.onFail(response); } } } private AliResultCallback aliResultCallback; public void setResultCallback(AliResultCallback callback) { this.aliResultCallback = callback; } public interface AliResultCallback { void onSuccess(PaymentResponse response); void onFail(PaymentResponse response); } }
A: 源码中的AlipaySmileModel文件中填入你在蚂蚁开放平台申请开通的参数之后,根据支付宝相关规定进行数据调整才可以直接使用支付宝刷脸功能
A: 您可以使用商米收银台调用刷脸功能。或直接在蚂蚁开放平台申请此功能,并且在商米开发者平台申请调用支付宝刷脸服务的权限。
A: 直接使用商米收银台,收银台将同步支持最新版的支付宝刷脸功能。或者由第三方软件自主控制是否显示在副屏,需要调用zolozVerify方法时增加参数params.put("smile_mode", "1");
A: 在设置-应用中找到simle软件,开启允许在其他应用上运行的权限。
S2系列电子秤直接使用封装好的jar包 scale-service-lib.jar
//连接电子秤服务 private void connectScaleService() { mScaleManager = ScaleManager.getInstance(this); mScaleManager.connectService(new ScaleManager.ScaleServiceConnection() { @Override public void onServiceConnected() { getScaleData(); } @Override public void onServiceDisconnect() { } }); } //实时获取电子秤数据 private void getScaleData() { try { mScaleManager.getData(new ScaleCallback.Stub() { @Override public void getData(final int i, int i1, final int i2) throws RemoteException { net = i; // i = 净重量 单位 克 ,i1 = 皮重量 单位 克 ,i2 = 稳定状态 1 为稳定。具体其他状态请参考商米开发者文档 } }); } catch (RemoteException e) { e.printStackTrace(); } }
扫码枪其实就是一个外接键盘,事件在dispatchKeyEvent中获取,二维码和条形码每一位都会触发一次该方法,有些扫码枪在输入完成后会主动多调用一次enter按键。
demo中提供一个简易的扫码监听方式:
private StringBuilder sb = new StringBuilder();
private Handler myHandler = new Handler();
@Override
public Boolean dispatchKeyEvent(KeyEvent event) {
int action = event.getAction();
switch (action) {
case KeyEvent.ACTION_DOWN:
int unicodechar = event.getUnicodechar();
sb.append((char) unicodechar);
Log.e(TAG, “扫码===“ + event.getKeyCode() + “ “ + sb.toString());
if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {
return super.dispatchKeyEvent(event);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
return super.dispatchKeyEvent(event);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
return super.dispatchKeyEvent(event);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
return super.dispatchKeyEvent(event);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_HOME) {
return super.dispatchKeyEvent(event);
}
if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
return super.dispatchKeyEvent(event);
}
final int len = sb.length();
myHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (len != sb.length()) return;
Log.e(TAG, “isQRcode”);
if (sb.length() › 0) {
//Do something
sb.setLength(0);
}
}
}
, 200);
return true;
default:
break;
}
return super.dispatchKeyEvent(event);
}
2021-11-17
2021-12-15
2021-03-03
2023-07-01
国内业务联系:18824718289
海外业务联系:0086-18926258958
国内邮箱联系:xuyc@sunmihome.com
海外邮箱联系:jenny@suyn.com
周一至周五:9:00—18:00
周六、周日:9:00—18:00