# 元芒餐饮服务(WmCateringService)
## 安卓SDK接口说明文档

##### Version Release v1.0.2
##### 更新时间: 2024.09.24
#### 上海元芒数字科技有限公司
[TOC]
# Android端SDK接口文档
# 一、 文档说明
## 1.1 版本说明
| SDK版本号 | 发布日期 | 更新内容 |
| --------- | ---------- | ---------------------------------------- |
| 1.0.0 | 2024.07.18 | 1.餐饮识别效果演示版本 |
| 1.0.1 | 2024.08.01 | 1.算法模块集成
2.相机模块集成 |
| 1.0.2 | 2024.09.24 | 1.发版版本 |
## 1.2 文档概述
此文档用于说明元芒数字餐饮服务(WmCateringService)Android系统接
口开发使用,集成相关软件包,以实现相关功能的接口说明文档。
## 1.3 术语定义以及说明
1. 术语说明
+ WmCateringService:元芒餐饮服务
2. 本文中所有传输内容均使用UTF- 8编码;
3. 本文SDK适用于Android 11及以上,主板要求RK3568(带有NPU模块),使用JAVA 1.8 版本;
4. 本文中的服务程序支持armeabi-v7a、arm64-v8a架构。
# 二、 调用流程
## 2.1 集成方法说明
1. 把WmCateringService_v1.0.2_sdk.jar放在工程libs目录下;
2. module的build.gradle中添加依赖:
```
Implementation files("libs/WmCateringService_v1.0.2_sdk.jar")
```
3. AndroidManifest.xml中增加权限:
```
```
4. 若程序开启代码混淆,在防混淆文件中增加:
```
-keep public class com.wmdigit.** {*;}
```
**接口调用流程描述 **
1. 推荐在主页Activity的onCreate()中调用bindService接口,绑定本地餐饮服务(需要预装服务程序);
2. 绑定成功后,调用init接口,对SDK进行初始化;
3. 初始化成功后,调用registerDetectionListener接口,注册识别结果的监听回调;
4. 同时,可以在Activity的onStart()和onStop()中,分别调用registerDetectionListener接口和unregisterDetectionListener接口,保证页面不可见时,不会因触发识别而占用设备性能。这两个接口具体的调用时机,可根据实际业务场景做调整;
5. 初次使用时,请调用openSettingPage接口或直接在系统桌面打开餐饮服务程序,进入设置页面,在设置页面中注册激活码和设定检测区域
6. 关于商品学习,请先调用importProducts接口,导入客户端的商品资料,然后打开餐饮服务设置页,进入数据学习页面
# 三、 接口说明
## 主流程接口
## 3.1 bindService(绑定服务)
- 使用场景: 此接口用于绑定WmLPService本地服务,推荐在主页Activity的onCreate()中调用
- 函数名: bindService
- 函数原型
```java
public static void bindService(Context context, IOnServiceConListener listener);
```
- 请求参数
| 请求参数 | 必填 | 类型 | 描述 |
| -------- | ---- | --------------------- | ---------------- |
| context | 是 | Context | Context上下文 |
| listener | 是 | IOnServiceConListener | 本地服务连接回调 |
- 返回说明
- 请求用例
```java
WmSdk.getInstance().bindService(mContext, new IOnServiceConListener() {
@Override
public void onConnected(ComponentName componentName, IBinder iBinder) {
}
@Override
public void onDisconnected(ComponentName componentName) {
}
});
```
## 3.2 init(初始化服务SDK)
- 使用场景:此接口用于初始化,请在服务绑定成功后调用一次
- 函数名:init
- 函数原型
```java
public static void init();
```
- 请求参数
- 返回说明
- 请求用例
```java
WmSdk.getInstance().init();
```
## 3.3 openSettingPage(打开设置页)
- 使用场景: 此接口用于打开设置页面
- 函数名: openSettingPage
- 函数原型
```java
public static void openSettingPage();
```
- 请求参数
- 返回说明
- 请求用例
```java
WmSdk.getInstance().openSettingPage();
```
## 3.4 autoDetect(商品识别)
- 使用场景: 当扫码枪收到条码时,调用此接口
- 函数名: autoDetect
- 函数原型
```java
public void autoDetect(String barcode, String plu, String sessionId);
```
- 请求参数
| 请求参数 | 必填 | 类型 | 描述 |
| --------- | ---- | ------ | ------------------------------ |
| barcode | 是 | String | 扫码枪接收到的条码 |
| plu | 否 | String | 生鲜plu(仅生鲜类商品需要传plu) |
| sessionId | 否 | String | 区分相同条码的商品 |
- 返回说明
- 请求用例
```java
// 接收到的条码
String scanCode = "223057500988";
// 购物车中的行号,当相同barcode的商品第一次正确,第二次发生错扫,这时行号就可以区分是哪一个商品发生了错扫
String sessionId = UUID.randomUUID().toString();
// 不是生鲜码
if(){
WmSdk.getInstance().autoDetect(scanCode, "", sessionId);
}else {
// 是生鲜码
String plu = "30575";
// 从条码中解析出对应的PLU
WmSdk.getInstance().autoDetect(scanCode, plu, sessionId);
}
```
## 3.5 start(开启防损检测)
- 使用场景:用于开启检测,推荐在购物车页面的onResume()中调用
- 函数名:start
- 函数原型
```java
public int start(IOnAlertEventCallback callback);
```
- 请求参数
| 请求参数 | 必填 | 类型 | 描述 |
| -------- | ---- | --------------------- | ------------------------------------------------------------ |
| callback | 是 | IOnAlertEventCallback | 当发生漏扫、错扫时,通过该回调函数进行通知,通知信息存储在回调参数AlertEvent中,AlertEvent属性:
bitmap : 识别图片,这里如果抓图异常,可能为空
barcode : 条码
plu : 生鲜码
sessionId : 行号
eventType : 识别类型,0错扫,1漏扫
feature : 特征值 |
- 返回说明
| 返回值类型 | 说明 |
|-------|------------|
| 0 | 成功 |
| 2001 | 缺少密钥文件1 |
| 2002 | 缺少密钥文件2 |
| 2003 | 密钥文件1校验失败 |
| 2004 | 密钥文件2校验失败 |
| 2005 | 未注册 |
| 2007 | 未标定动作检测区域 |
| 2008 | 未标定物品识别区域 |
| 3001 | 摄像头USB未连接 |
| 3002 | 摄像头尚未初始化完成 |
| 3003 | 摄像头工作停止 |
- 请求用例
```java
private final IOnAlertEventCallback callback= new IOnAlertEventCallback.Stub() {
@Override
public void onAlertEventCallback(AlertEvent event) throws RemoteException{
switch (alertEventBean.getScanType()){
case 1:
System.out.println("漏扫回调");
break;
case 0:
System.out.println("错扫回调");
break;
default:
break;
}
}
};
int ret = WmSdk.getInstance().start(callback);
String message = "";
switch (ret){
case 0: // 成功
message = "检测开启成功";
break;
case 2001:
case 2002:
message = "缺少密钥文件,请先注册激活";
break;
case 2003:
case 2004:
message = "密钥文件校验失败";
break;
case 2005:
message = "未注册,请先注册激活";
break;
case 2007:
message = "未设置动作检测区域";
break;
case 2008:
message = "未设置物品识别区域";
break;
case 3001:
message = "摄像头USB断开连接";
break;
case 3002:
message = "摄像头工作停止";
break;
default:
message = "初始化失败" + ret;
break;
}
```
## 3.6 pause(暂停防损检测)
- 使用场景: 用于暂停检测,推荐在购物车页面的onPause()中
- 函数名:pause
- 函数原型
```Java
public void pause();
```
- 请求参数
- 返回说明
- 请求用例
```java
WmSdk.getInstance().pause();
```
## 3.7 unbindService(解绑服务)
- 使用场景: 用于解绑服务,推荐在主页Activity的onStop()中调用
- 函数名:unbindService
- 函数原型
```Java
public void unbindService();
```
- 请求参数
- 返回说明
- 请求用例
```java
WmSdk.getInstance().unbindService();
```
## 其他接口
## 4.1 feedback(保存识别结果)
- 使用场景: 用于保存识别记录
- 函数名:feedback
- 函数原型
```Java
public void feedback(DetectResult result);
```
- 请求参数
| 请求参数 | 必填 | 类型 | 描述 |
| -------- | ---- | ------------ | ------------------------------------------------------------ |
| saveBean | 是 | DetectResult | 保存识别结果DetectResult的属性:
productId : 商品标识
feature : 特征值 |
- 返回说明
- 请求用例
```java
WmSdk.getInstance().feedback(result);
```
## 4.2 setAdminPassword(设置管理员密码)
- 使用场景: 用于设置管理员密码
- 函数名:setAdminPassword
- 函数原型
```Java
public void setAdminPassword(String password);
```
- 请求参数
| 请求参数 | 必填 | 类型 | 描述 |
| -------- | ---- | ------ | ---- |
| password | 是 | String | 密码 |
- 返回说明
- 请求用例
```java
WmSdk.getInstance().setAdminPassword(password);
```
# 附录 1 :商品识别返回错误码
| **错误码** | **描述** | **解决方案** |
|---------|---------------------------------|-------------|
| 0 | 成功 | |
| 1001 | 初始化失败 | |
| 1002 | 模型初始化失败 | |
| 2001 | 缺少密钥文件1 | 重新注册激活 |
| 2002 | 缺少密钥文件2 | 重新注册激活 |
| 2003 | 密钥文件1校验失败 | 重新注册激活 |
| 2004 | 密钥文件2校验失败 | 重新注册激活 |
| 2005 | 未注册 | 重新注册激活 |
| 2007 | 未标定动作检测区域 | 设置页动作检测区域 |
| 2008 | 未标定物品识别区域 | 设置页图像识别区域 |
| 3001 | 摄像头USB断连 | 检查摄像头USB口连接 |
| 3002 | 摄像头尚未初始化完成 | 等待摄像头初始化 |
| 3003 | 摄像头停止工作 | 等待相机恢复 |
| 65006 | 此POS的MAC地址绑定过其他设备,请联系管理员确认POS编号 | |
| 65014 | SnCode未找到 | |
| 65017 | 该POS的MAC地址与服务器记录的地址不同,无法解绑 | |
| 65019 | SnCode并未绑定,无需解绑 | |
| 65024 | 该SN码不属于该租户 | |
| 65028 | 该SN码已被其他设备绑定 | |
# 附录 2 :用例说明
## 一、 识别服务程序使用说明
1. 在机器上安装WmLPService-v1.3.13-release.apk服务程序
2. 初次安装后请在桌面找到元芒防损服务程序,点击运行,会弹出权限申请界
面,请同意所需权限
3. 初次使用请先打开设置页面,完成激活码注册和检测区域标定
## 二、 注意事项
1. 相关接口使用请参考演示DEMO工程中的代码