商米提供一個簡易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
週一至週五:9:00—18:00
週六、週日:9:00—18:00
國內業務聯系:18824718289
海外業務聯系:0086-18926258958
國內郵箱聯系:xuyc@sunmihome.com
海外郵箱聯系:jenny@suyn.com