元芒数字 i 识别服务(WmAceService)
安卓SDK接口说明文档
Version Release v1.1.003
更新时间: 2023. 06.26
上海元芒数字科技有限公司
[TOC]
Android端SDK接口文档
一、 文档说明
1.1 版本说明
SDK版本号 | 发布日期 | 更新内容 |
---|---|---|
v1.0.000 | 2022.04.06 | 1. 初版SDK发布,核心算法V1 |
v1.0.001 | 2022.04.08 | 1. 修复部分BUG |
v1.0.002 | 2022.04.14 | 1. 增加秤盘裁剪接口 3.5 2. 增加服务程序权限获取 |
v1.0.003 | 2022.04.18 | 1. 增加获取秤盘裁剪参数接口3.4 2. 增加判断初始化是否完成接口5.7 3. 更新接口3.2 |
v1.0.004 | 2022.05.20 | 1. 补充识别接口日志 |
v1.0.005 | 2022.05.23 | 1. 解决离线或者局域网情况下不会向本地保存图片的问题 |
v1.0.006 | 2022.05.26 | 1. 新增更新在售商品数据接口4.4 2. 优化服务程序大小 3. 更新错误码表 |
v1.0.007 | 2022.07.25 | 1. 已知问题修改 |
v1.0.008 | 2022.11.18 | 1. 核心算法升级V2(与旧算法不兼容) 2. 增加设置页的打开注册页面功能 3. 增加 5.8 判断服务是否安装接口 4. 更新 3.5 打开裁剪页面接口名称 5. 更新IOnDataOperate回调参数 6. 优化 4.1 和 4.2 导入导出数据的性能 7. 更新DEMO演示示例代码 8. 增加APP LOGO 9. 增加点击服务程序图标时的反馈 |
v1.0.009 | 2022.12.05 | 1. 增加断开服务连接接口,已废弃 2. 扩增算法库容量 3. 增加老版本服务兼容 |
v1.0.010 | 2023.01.03 | 1. 增加 4.7 自动配图接口 2. 增加 5.9 查询POS注册信息接口 3. 增加在线检测、日志上传 4. 优化算法存储策略 5. 增加Android11适配 6. 更新 4.4 不再推荐某商品接口 |
v1.0.011 | 2023.02.02 | 1. 更新 3.6 识别接口返回值 |
v1.0.012 | 2023.02.13 | 1. 算法容量扩容 |
v1.1.001 | 2023.03.08 | 1. 核心算法升级V3(与V2、V1算法不兼容) |
v1.1.002 | 2023.04.15 | 1. 支持不规则矩形裁剪秤盘 2. 增加 5.10 SN合法性校验接口 3. 增加 4.6 预学习数据接口 4. 修复已知BUG |
v1.1.003 | 2023.06.02 | 1. 增加学习数据回传云端 2. 增加接口 4.5 根据sn码下载云端学习数据 3. 增加接口 3.8 查询设备本地激活状态 4. 增加服务程序设置页,点击程序图标即可进入 5. 修复已知BUG 6. 优化接口文档 |
v1.1.004 | 2023.07.13 | 1. 增加 5.11 识别图片接口(商米需求) 2. 修改 3.5 打开秤盘裁剪页跳转的目标界面 |
v1.1.005 | 2023.07.18 | 1. 新增功能:从云端下载v3向量 |
1.2 文档概述
此文档用于说明元芒数字(WM)i识别服务(简称WmAceService)Android系统接口开发使用,集成相关软件包,以实现相关功能的接口说明文档。
1 3 术语定义以及说明
- 术语说明
- WmAceService:元芒识别服务SDK
- WmService:预装在系统上的服务APP,用于AI识别并与SDK通信;
- 本文中所有传输内容均使用UTF- 8编码;
- 本文SDK适用于Android 5.1 以上,使用JAVA语言 1.8 版本;
- 本文中的WmService服务程序支持armeabi-v7a、arm64-v8a架构。
二、 继承方法说明
2.1 在工程中引入sdk
1.把WmAceService_v1.1.003 _sdk.jar放在工程libs目录下
2.module的build.gradle中添加依赖:
implementation files ('libs/WmAceService_v1.1.003_sdk.jar')
3.Android11以上,需要在AndroidManifest.xml中增加权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
2.2 主要接口调用时序图
flowchart TB
a1(连接本地服务<br/>3.1 bindService) --> a2[初始化sdk<br/>3.2 init] --> a3{设备是否激活<br>3.8getPosActivationStatus}
b1[注册pos机<br/>3.3 initPos]
c1{秤盘是否裁剪<br/>3.4getScaleSetting}
c2[打开秤盘裁剪页面<br/>3.5 openCropPage]
d1[识别商品<br/>3.6 autoDetect]
d2[回传识别结果<br/>3.7 setFeedBack]
e1(解绑本地服务<br/>3.9 unbindService)
a3 --> |是| c1
a3 --> |否| b1
b1 --> c1
c1 --> |是| d1
c1 --> |否| c2
c2 --> d1
d1 --> d2
d2 --> e1
2.3 主要接口调用描述
- 在主页面创建(onCreate)时调用 3.1 bindService接口绑定本地识别服务(需要预装WmService.apk)
- 绑定成功后调用 3.2 init接口初始化SDK;
- 首次使用需要先激活POS机,调用 3.3 initPos接口,需要传入SN、租户和POS编号,或者点击服务程序,在【注册激活】页面进行设备激活;
- 首次使用需要对识别范围进行裁剪,调用 3.5 openCropPage接口,打开裁剪页面,指定识别范围并保存,或者点击服务程序,在【识别区域】页面进行识别区域裁剪;
- 当秤盘重量变化大于 30 g时调用 3.6 autoDetect进行识别,识别结果会以商品ID列表的形式进行返回,由于该接口会耗费CPU大量资源,推荐从零点到稳重的过程中只调用一次;
- 当操作员对识别的结果进行确认后,请将确认的商品ID和本次识别的 sessionId通过3.7 setFeedback接口进行返回;
- 当主页面销毁(onDestory)后,请调用3.9 unbindService使客户端与服务程序解绑。
三、 接口说明
主流程接口
3.1 bindService(连接服务)
- 使用场景:此接口用于绑定WmService本地服务
- 函数名: bindService
- 函数原型
public static void bindService(Context context, IOnWmServiceConListener listener);
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
context | 是 | Context | Context上下文 |
listener | 是 | IOnWmServiceConListener | 本地服务连接回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().bindService(mView.getContext(), new IOnWmServiceConListener() {
@Override
public void onConnectSuccess() {
}
@Override
public void onConnectFailed() {
}
}
3.2 init(初始化服务SDK)
- 使用场景:此接口用于初始化服务程序
- 函数名:init
- 函数原型
public static int init( boolean isDebug,int modelId,float selfLearnMinScore)
public static int initWithCallback(boolean isDebug,int modelId,float selfLearnMinScore, IOnDataOperate callback)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
isDebug | 是 | Boolean | True: 正式环境;False: 测试环境 |
modelId | 是 | Int | 默认0,0:生鲜零食模式;1:农贸市场模式 |
selfLearnMinScore | 否 | Float | 默认0.8f |
callback | 否 | IOnDataOperate | 模型加载完成的回调 |
- 返回说明
返回值类型 | 返回值说明 |
---|---|
Int | 0:初始化成功1001:初始化失败1002:模型初始化失败 |
- 请求用例
WmSDK.getInstance().initWithCallback(Constant.isDebug, 0, 0.8f,new IOnDataOperate.Stub(){
@Override
public void onSuccess() throws RemoteException {
}
@Override
public void onFail(int errorCode) throws RemoteException {
}
});
3.3 initPos(设备激活)
- 使用场景: 此接口用于设备注册并向云端验证
- 函数名:initPos
- 函数原型
public static void initPos(String posCode, String tenant, String snCode, IOnBindPosCallback listener)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
posCode | 是 | String | Pos编码 |
tenant | 是 | String | 租户代码 |
snCode | 是 | String | 激活密钥 |
listener | 是 | IOnBindPosCallback | 注册回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().initPos(Constant.POS_CODE, Constant.TENANT, Constant.SN_CODE, new IOnBindPosCallback.Stub() {
@Override
public void bindFail(int code, String message) throws RemoteException {
}
@Override
public void bindLoading() throws RemoteException {
}
@Override
public void bindSuccess() throws RemoteException {
}
});
3.4 getScaleSetting(判断识别区域是否裁剪)
- 使用场景: 此接口用于判断识别区域是否裁剪
- 函数名: getScaleSetting
- 函数原型
public static boolean getScaleSetting()
- 请求参数
- 返回说明
返回值类型 | 返回值说明 |
---|---|
Boolean | True:已裁剪;False:未裁剪 |
- 请求用例
WmSDK.getInstance().getScaleSetting();
3.5 openCropPage(打开秤盘裁剪页面)
- 使用场景:此接口用于打开服务程序的识别区域裁剪界面, 注意要在调用 3.2 init接口之后再调用
- 函数名: cropCameraBitmap
- 函数原型
public static void cropCameraBitmap();
- 请求参数
- 返回说明
- 请求用例
WmSDK.getInstance().openCropPage();
3.6 autoDetect(商品识别)
- 使用场景:当重量大于 30 g时或者重量稳定后变化大于 30 g时,进行商品识别
- 函数名: autoDetect
- 函数原型
public DetectResult autoDetect()
- 请求参数
- 返回说明
返回值类型 | 返回值说明 |
---|---|
DetectResult | Int errorCode: 错误码(0为成功); String sessionId: 会话ID; Long startTime: 识别开始时间戳; List float[] scores: 识别结果相似度,与productIds一一对应。 |
- 请求用例
DetectResult result = WmSDK.getInstance().autoDetect();
if (result != null && result.getProductIds() != null){
// 对识别结果进行处理
}
else{
// 本次未识别出结果
}
3.7 setFeedBack(回传识别结果)
- 使用场景: 当操作员对商品识别接口的返回值进行确认时,调用该接口
- 函数名: setFeedBack
- 函数原型
public void setFeedBack(String sessionId, String productId, String ,productName,boolean hit)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
sessionId | 是 | String | 3.6 autoDetect接口返回的会话ID |
productId | 是 | String | 商品识别码 |
productName | 是 | String | 商品名称 |
hit | 是 | Boolean | 不再由客户端判断,直接传false即可 |
- 返回说明
- 请求用例
WmSDK.getInstance().setFeedBack(sessionId, plu, "测试商品名称", false);
3.8 getPosActivationStatus(获取设备激活状态)
- 使用场景: 此接口用于判断设备本地是否激活
- 函数名: getPosActivationStatus
- 函数原型
public static boolean getPosActivationStatus()
- 请求参数
- 返回说明
返回值类型 | 返回值说明 |
---|---|
Boolean | True:已激活; False:未激活 |
- 请求用例
WmSDK.getInstance().getPosActivationStatus();
3.9 unbindService(解除和服务的绑定)
- 使用场景:此接口用于解绑WmService本地服务,一般在绑定服务的页面销毁时调用,保证服务程序的生命周期与客户端一致
- 函数名: unbindService
- 函数原型
public static void unbindService();
- 请求参数
- 返回说明
- 请求用例
WmSDK.getInstance().unbindService();
数据管理接口
4.1 exportData(导出学习数据)
- 使用场景: 将本机的学习数据以数据库形式导出,导出的文件在"/根目录/database/ExportWmAceKG.db"
- 函数名: exportData
- 函数原型
// /storage/emulated/0/database/ExportWmAceKG.db
public static void exportData(IOnDataOperate listener)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
Listener | 是 | IOnDataOperate | 导出数据的结果回调 |
-
返回说明
-
请求用例
WmSDK.getInstance().exportData(new IOnDataOperate.Stub() {
@Override
public void onSuccess() throws RemoteException {
}
@Override
public void onFail(int errorCode) throws RemoteException {
}
});
4.2 importData(导入学习数据)
- 使用场景: 将4.1接口导出的数据库进行导入,实现学习数据共享,导入的目录与4.1接口相同,在"/根目录/database/ExportWmAceKG.db"
- 函数名: importData
- 函数原型
public static int importData(boolean delete, IOnDataOperate listener)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
Delete | 是 | Boolean | True: 删除原来数据False: 保留原来数据 |
listener | 是 | IOnDataOperate | 导入数据的结果回调errorCode: 4001->数据库文件不存在 |
-
返回说明
-
请求用例
WmSDK.getInstance().importData(isDelete, new IOnDataOperate.Stub() {
@Override
public void onSuccess() throws RemoteException {
}
@Override
public void onFail(int errorCode) throws RemoteException {
}
});
4.3 clearTrainedData(清除训练数据)
- 使用场景: 清空本地学习数据
- 函数名: clearTrainedData
- 函数原型
public static void clearTrainedData()
- 请求参数
- 返回说明
- 请求用例
WmSDK.getInstance().clearTrainedData();
4.4 setNoRecommend(不再推荐某商品)
- 使用场景:删除某商品ID对应的全部学习数据
- 函数名: setNoRecommend
- 函数原型
public void setNoRecommend (String productId)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
productId | 是 | String | 不再推荐的商品ID |
- 返回说明
- 请求用例
WmSDK.getInstance().setNoRecommend(plu);
4.5 downloadFeatureBySn(根据sn下载云端学习数据)
- 使用场景: 此接口可以从云端下载对应SN下的学习数据
- 函数名: downloadFeatureBySn
- 函数原型
public void downloadFeatureBySn(String snCode, IOnDownloadBySnCallback callback);
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
snCode | 是 | String | sn码 |
callback | 是 | IOnDownloadBySnCallback | 云端下载结果回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().downloadFeatureBySn(snCode, new IOnDownloadBySnCallback.Stub() {
@Override
public void onSuccess(int i, String s) throws RemoteException {
mView.appendLog("返回码:"+i+",返回信息:"+s);
}
@Override
public void onFailure(int i, String s) throws RemoteException {
mView.appendLog("返回码:"+i+",返回信息:"+s);
}
});
4.6 preLearning(预学习数据)
- 使用场景:将传入的商品名称,与后台预设好的学习数据进行匹配,再将匹配的学习记录下载到本地
- 函数名: preLearning
- 函数原型
public static void preLearning(List<ProductMatch> productList, IOnPreLearningCallback callback)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
productList | 是 | List | 全部商品的PLU和名称列表 |
callback | 是 | IOnPreLearningCallback | 预学习结果回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().preLearning(list, new IOnPreLearningCallback.Stub() {
@Override
public void onSuccess(int successNum) throws RemoteException {
mView.appendLog(String.format("预学习成功,学习的商品数量:%s", successNum));
}
@Override
public void onFailure(int code, String message, int successNum) throws RemoteException {
mView.appendLog(String.format("预学习失败, code:%s, message:%s, 学习的商品数量:%s", code, message, successNum));
}
});
4.7 thumbnailsAutoMatch(自动配图)
- 使用场景: 此接口用于根据传入的商品名称,在后台进行商品预览图的匹配,并返回商品预览图url
- 函数名: thumbnailsAutoMatch
- 函数原型
public static void thumbnailsAutoMatch (List<ProductMatch> products, IOnAutoMatchCallBack listener)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
products | 是 | List | productNumber: 商品编码productName: 商品名称 |
listener | 是 | IOnAutoMatchCallBack | 后台匹配图片完成后的回调方法 |
- 返回说明
- 请求用例
WmSDK.getInstance().thumbnailsAutoMatch(list, new IOnAutoMatchCallBack.Stub(){
@Override
public void onSuccess(int successNum, List<ProductMatch> data) throws RemoteException {
}
@Override
public void onFailed(int failedNum) throws RemoteException {
}
});
其他接口
5.1 setCameraId(设置摄像头ID并重启相机)
- 使用场景: 此接口用于设置摄像头ID,默认 0
- 函数名: setCameraId
- 函数原型
public static void setCameraId(int cameraId)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
cameraId | 是 | Int | 摄像头位置,默认0 |
- 返回说明
- 请求用例
WmSDK.getInstance().setCameraId(position);
5.2 getScaleBitmap(获取识别区域照片)
- 使用场景:拍摄一张识别区域的照片
- 函数名: getScaleBitmap
- 函数原型
public ScaleBitmap getScaleBitmap(boolean cropByScale);
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
cropByScale | 是 | Boolean | True:返回裁剪后的图像; False:返回原图 |
- 返回说明
返回值类型 | 返回值说明 |
---|---|
ScaleBitmap | Bitmap raw:原图; Bitmap crop:裁剪后的图片 |
- 请求用例
WmSDK.getInstance().getScaleBitmap(false);
5.3 unBindPos(解绑Pos)
- 使用场景:调用此接口在后台将SN与设备解绑
- 函数名: unBindPos
- 函数原型
public static void unBindPos( String tenant, String snCode, IOnUnBindPosCallback listener)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
tenant | 是 | String | 租户代码 |
snCode | 是 | String | POS的SN |
listener | 是 | IOnUnBindPosCallback | 解绑回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().unBindPos(tenant, snCode, callback);
5.4 getLocalImagePath(获取本地图片地址)
- 使用场景:通过SessionId获取本次识别的图片路径
- 函数名: getLocalImagePath
- 函数原型
public static String getLocalImagePath(String sessionId)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
sessionId | 是 | String | 识别时返回的会话ID |
- 返回说明
返回值类型 | 返回值说明 |
---|---|
String | 识别的图片路径 |
- 请求用例
WmSDK.getInstance().getLocalImagePath(sessionId);
5.5 startServer(启动局域网同步)
- 使用场景: 启动局域网同步,会在新品学习时,自动传输到局域网内另一台设备上
- 函数名: startServer
- 函数原型
//启动服务
public static void startServer();
- 请求参数
- 返回说明
- 请求用例
WmSDK.getInstance().startServer();
5.6 stopServer(停止局域网同步)
- 使用场景: 停止该设备向局域网内其他设备同步数据
- 函数名: stopServer
- 函数原型
public static void stopServer();
- 请求参数
- 返回说明
- 请求用例
WmSDK.getInstance().stopServer();
5.7 isInitSuccess(获取当前初始化状态)
- 使用场景: 此接口用于获取模型初始化的状态,如果未完成初始化,识别时会报 2007 异常
- 函数名: isInitSuccess
- 函数原型
public static boolean isInitSuccess()
-
请求参数
-
返回说明
返回值类型 | 返回值说明 |
---|---|
boolean | True:已完成模型初始化; False: 未完成初始化 |
- 请求用例
WmSDK.getInstance().isInitSuccess();
5.8 isServicePackageInstalled(服务是否安装)
- 使用场景: 此接口用于检测服务程序是否安装
- 函数名: isServicePackageInstalled
- 函数原型
public static boolean isServicePackageInstalled(Context context);
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
context | 是 | Context | 上下文 |
- 返回说明
返回值类型 | 返回值说明 |
---|---|
boolean | True:本地服务已安装; False: 本地服务未安装 |
- 请求用例
WmSDK.getInstance().isServicePackageInstalled(context);
5.9 queryPosByMac(根据mac查询注册信息)
- 使用场景: 此接口用于向后台查询本机的注册信息
- 函数名:queryPosByMac
- 函数原型
public static void queryPosByMac (OnQueryPosRegisterInfoCallback listener);
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
listener | 是 | OnQueryPosRegisterInfoCallback | 请求注册信息的回调 |
- 返回说明
- 请求用例
WmSDK.getInstance().queryPosByMac(new OnQueryPosRegisterInfoCallback.Stub(){
@Override
public void onSuccess(String posId, String snCode, String tenant) throws RemoteException {
}
@Override
public void onFailed(int code, String errorMessage) throws RemoteException {
}
});
5.10 checkSnCodeVerification(检查SnCode合法性)
- 使用场景:此接口用于查询本机的SnCode在云端的状态
- 函数名: checkSnCodeVerification
- 函数原型
public static void checkSnCodeVerification(String snCode, long timeout, IOnCheckSnCodeVerificationCallback callback)
- 请求参数
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
snCode | 否 | String | 设备激活时使用的SN密钥,当传空值时,会取服务程序本地保存的SN密钥进行校验 |
timeout | 是 | long | 该接口进行请求时的网络超时时间,单位秒 |
callback | 是 | IOnCheckSnCodeVerificationCallback | 校验结果的回调 |
- 返回说明
- 请求用例
WmSDK.checkSnCodeVerification(snCode, 3L, new IOnCheckSnCodeVerificationCallback.Stub() {
@Override
public void onSuccess(int code, String message) throws RemoteException {
}
@Override
public void onFailure(int code, String message) throws RemoteException {
}
});
附录 1 :商品识别返回错误码
错误码 | 描述 | 解决方案 |
---|---|---|
0 | 成功 | |
1001 | 初始化失败 | |
1002 | 模型初始化失败 | |
1003 | 识别的Bitmap为空 | 查看图片是否正确 |
1004 | 获取图片信息失败 | 查看图片是否正确 |
1005 | 图片转化失败 | 查看图片是否正确 |
1010 | 新品写入失败 | |
1011 | 获取模型版本号失败 | |
2000 | 打开摄像头失败 | 检查使用系统自带相机能否打开 |
2001 | wmkey.wm密钥文件不存在 | 重新注册激活 |
2002 | Wmkey.pem密钥文件不存在 | 重新注册激活 |
2003 | 解密失败 | 解密为空或者获取MAC地址为空 |
2004 | 解密失败 | 对比失败 |
2005 | 模型识别失败 | 传入图片模型识别失败 |
2006 | 没有租户 | 重新注册 |
2007 | 没有初始化数据 | 请调用updateLearningData接口 |
2008 | 本地未找到SnCode | 重新注册 |
3001 | 裁剪参数不规范 | 参数应大于0 |
3002 | 裁剪比例不规范 | 未按宽高比4:3裁剪 |
3003 | 未设置相机裁剪区域 | 调用3.24openCropPage接口进行裁剪 |
4001 | 数据库文件不存在 | |
4002 | 接口传入参数非法 | 参数不应为空 |
4003 | WmService本地服务连接失败 | 检查WmService是否安装启动 |
4004 | 本机已有学习数据, 不需要重复导入 | |
4005 | 后台正在执行耗时任务 | |
4007 | 本机已有学习数据,无需下载 | |
65006 | 该POS的MAC地址绑定过其他设备 | |
65014 | 该SN码不存在 | |
65017 | 该POS的MAC地址和服务器记录的MAC地址不一致 | |
65019 | 该SN码未绑定 | |
65024 | 该SN码不属于该租户 | |
65027 | 该SN码未绑定 | |
65028 | 该SN码已被其他设备绑定 | |
66001 | 找不到指定的POS机 |
附录 2 :用例说明
一、 识别服务序使用说明
- 在机器上安装WmService-v1.1.003-release.apk服务程序;
- 在桌面找到"识别服务"程序,点击运行(点击一次即可),如果为第一次使用,会弹出权限申请界面,请同意“相机”和“储存”权限,若系统版本为Android11及以上,需要额外同意"悬浮在其他应用上层"的权限;
- 授权成功后,会跳转到设置页面,请在设置页的【注册激活】和【识别区域】两个界面,完成设备激活和识别区域裁剪,若客户端APP已集成注册和裁剪功能,该步骤可跳过;
- 客户端启动时,服务程序会被自动调起,仅初次安装需要执行上述 2 、3两步骤;
- 日志文件存放在/Android/data/com.wmdigit.wmaidl/files/Log/目录下,每日的日志最多存放 7 天,服务出现异常时,若设备可以连接外网,请联系运维人员从后台拉取日志;若设备是内网环境,则麻烦手动拷贝该日志。
二、 识别接口的调用时机
- 重量超过30g开始触发识别;
- 重量稳定后,如果又发生了变化,变化值超过10g,再触发一次。这里的稳定,就是秤stable那个状态,且两次稳定的值都不为0;
三、 注意事项
- 除了bindService接口,其他接口所使用的回调,返回后均在子线程,请注意线程切换
- 相关接口使用请参考WmServiceSdkDemo工程中的代码,注意替换snCode、tenant、posCode等参数