Android端SDK接口文档
一、文档说明
1.1 版本说明
SDK版本号 | 发布日期 | 更新内容 |
---|---|---|
1.0.000 | 2022.07.30 | 1. 初版SDK发布 |
1.0.013 | 2022.12.27 | 1. 接口调用逻辑变更 |
1.0.014 | 2023.03.07 | 1. 增加错扫 |
1.1.001 | 2023.04.25 | 1. 完善错扫逻辑 |
1.1.002 | 2023.05.10 | 1. 增加错扫和漏扫回调 |
1.2 文档概述
此文档用于说明元芒数字防损服务(WmLossPreventService) Android系统接口开发使用,集成相关软件包,以实现相关功能的接口说明文档。
1.3 术语定义以及说明
1. 术语说明:WmLPService:元芒防损服务SDK
-
本文中所有传输内容均使用UTF-8编码;
-
本文SDK适用于Android5.1以上,使用JAVA语言1.8版本;
-
本文中的服务程序支持armeabi-v7a、arm64-v8a架构。
二、调用流程
2.1 集成方法说明
-
把WmLPService_v1.1.002_sdk.jar放在工程libs目录下;
-
module的build.gradle中添加依赖:
Implementation files ("libs/WmLPService_v1.1.002_sdk.jar")
- AndroidManifest.xml中增加权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES">
接口调用流程描述
- 在application中调用bindService绑定本地WmLPService服务(需要预装服
务程序)
-
绑定成功后,调用init接口,对SDK进行初始化
-
初次使用,请调用openSettingPage接口,进入设置页面,在设置页面中注册激活码和设定检测区域
-
当进入需要防损检测的页面时,例如进入购物车页面,调用start接口,开启防损检测
-
当有商品扫码时,调用autoDetect接口,并将扫码枪接收的barcode,生鲜商品的plu,区分相同条码的sessionId传入
-
当进入不需要防损检测的页面时,例如离开购物车进入结算页面,调用pause 接口,暂停防损检测
-
当进入不需要防损检测的页面时,例如离开购物车进入结算页面,3.7和3.8 回调接口需传null,等重新进入识别界面时候再重新传正确的回调参数
三、接口说明
3.1 bindService(连接服务)
-
使用场景: 此接口用于绑定WmLPService本地服务
-
函数名: bindService
-
函数原型
public static void bindService(Context context, IOnServiceConListener listener)
-
请求参数
请求参数 必填 类型 描述 context 是 Context Context上下文 listener 是 IOnServiceConListener 本地服务连接回调 -
返回说明
-
请求用例
WmSdk.getInstance().bindService(context, new IOnServiceConListener() { @Override public void onConnected(ComponentName componentName, IBinder iBinder){ Toast,makeText(context, text:"连接服务成功",Toast.LENGTH_SHORT).show(); } @Override public void onDisconnected(ComponentName componentName){ Toast.makeText(context, text:"连接服务断开",Toast,LENGTH_LONG),show(); } });
3.2 init(初始化服务SDK)
-
使用场景:此接口用于初始化相机和相关检测程序
-
函数名:init
-
函数原型
public static void init()
-
请求用例
WmSdk.getInstance().init(new IOnInitListener.Stub() { @Override public void onSuccess(int i) throws RemoteException {...} @Override public void onFailed(int i) throws RemoteException { runOnUiThread(new Runnable() {...}); });
3.3 openSettingPage(打开设置页)
-
使用场景:此接口用于打开设置页面
-
函数名:openSettingPage
-
函数原型
public static void openSettingPage()
-
请求用例
WmSdk.getInstance().openSettingPage();
3.4 autoDetect(商品识别)
-
使用场景:当扫码枪收到条码时,调用此接口,将条码和商品plu和商品 sessionId(sessionId为了区分相同条码的商品)传入SDK
-
函数名:autoDetect
-
函数原型
public voidautoDetect(String barcode,String plu,StringsessionId)
-
请求参数
请求参数 必填 类型 描述 barcode 是 String 扫码枪接收到的条码 Plu 是 String 生鲜plu(没有传空串即可) sessionId 是 String 区分相同条码的商品 -
请求用例
WmSdk.getInstance().autoDectect(scanCode);
3.5 start(开启防损检测)
-
使用场景:用于开启检测
-
函数名:start
-
函数原型
public int start()
-
返回说明
返回值类型 说明 Int 0:成功
2001、2002:缺少密钥文件
2003、2004:密钥文件校验失败
2008:未设置检测区域 -
请求用例
int ret = WmSdk.getInstance().start();
3.6 pause(暂停防损检测)
-
使用场景:用于暂停检测
-
函数名:pause
-
函数原型
public void pause()
-
请求用例
WmSdk.getInstance().pause();
3.7 setAlertEventCallback(监听错扫或漏扫)
-
使用场景:用于监听本次扫描是漏扫还是错扫(只是作为客户端记录)
-
函数名: setAlertEventCallback
-
函数原型
public void setAlertEventCallback(IOnAlertEventCallbackonCallback);
-
请求参数
请求参数 必填 类型 描述 onCallBack 是 IOnaAlertEventCallback 用来监听本次扫描是错扫还是漏扫 -
请求用例
WmSdk.getInstance(),setAlertEventCallback(new IOnAlertEventCallback.Stub(){
@Override
public void onAlertEventCallback(String barcode, String sessionId,int type) throws RemoteException {
if (type==1){
System.out.println("漏扫回调,这里可以记录");
}else if (type==0){
System.outprintln("错扫回调,这里可以记录”);
}
}
});
3.8 setItemDeleteCallback(错扫移除购物车商品回调)
-
使用场景:在弹出错扫框并点击"从购物车移除"按钮后,防损服务会回调返回本次错扫的barcode和sessionId,用于客户端删除已经加购过的商品
-
函数名:itemDeleteCallBack
-
函数原型
public void setItemDeleteCallback(IOnItemDeleteCallbackonCallback);
-
请求参数
请求参数 必填 类型 描述 onCallBack 是 IOnItemDeleteCallback 用来监听错扫情况返回 的sessionId和barcode -
请求用例
WmSdk.getInstancelback(newIOnItemDeleteCallback.Stub(){
@Override
public void onItemDeleteCallback(String barcode, String sessionId) throws RemoteException {
System.out.printIn("onErrorScanCallback回调==>"+barcode+"==="+sessionId);
if (Build.VERSION.SDK_INT >= Buid.VERSION_CODES.N){
cartProductItems.removeIf(item -> item.getSessionId().equals(sessionId));
}
BigDecimal multiply1 = new BigDecima( val: "0");
int allNum = 0;
for (CartProductItems cartProductItem : cartProductItems){
BigDecimal multiplyItem : new BigDecimal(cartProductItem.getSaleUnitPrice()).multiply(new BigDecimal( val: "1"));
multiply1 = multiply1.add(multiplyItem).setScale( newScale: 2,BigDecimal.ROUND_HALF_UP);
aliNum++;
}
BigDecimal finalMultinlyBiaDecimal= multiplv1;
附录1:商品识别返回错误码
错误码 | 描述 | 解决方案 |
---|---|---|
0 | 成功 | |
1001 | 初始化失败 | |
1002 | 模型初始化失败 | |
1003 | 识别得Bitmap为空 | 查看图片是否正确 |
1004 | 获取图片信息失败 | 查看图片是否正确 |
1005 | 图片转化失败 | 查看图片是否正确 |
2000 | 打开摄像头失败 | 检查使用系统自带相机能否打开 |
2001 | wmkey.wm文件不存在 | 需下载文件存该文件目录,并命名wmkey.wm |
2002 | Wmkey.pem文件不存在 | 需下载文件存该文件目录,并命名wmkey.pem |
2003 | 解密失败 | 解密为空或者获取MAC地址为空 |
2004 | 解密失败 | 对比失败 |
2005 | 模型识别失败 | 传入图片模型识别失败 |
2006 | 没有租户 | 重新注册 |
3001 | 裁剪参数不规范 | 参数应大于0 |
3002 | 裁剪比例不规范 | 未按宽高比4:3裁剪 |
3003 | 裁剪图片为空 | 检查相机,相机未启动 |
4001 | 数据库文件不存在 | |
4002 | 接口传入参数非法 | 参数不应为空 |
4003 | WmService本地服务连接失败 | 检查WmService是否安装启动 |
65014 | SnCode未找到 | |
65017 | 该PosCode已绑定过,并且 | |
65006 | 此POS的MAC地址绑定过其他设备,请联系管理员确认POS编号 | |
65019 | SnCode并未绑定,无需解绑 | |
65017 | 该POS的MAC地址与服务器记录的地址不同,无法解绑 | |
附录2:用例说明
一、识别服务程序使用说明
-
在机器上安装WmLPService-v1.1.002-release.apk服务程序
-
初次安装后请在桌面找到元芒防损服务程序,点击运行,会弹出权限申请界面,请同意所需权限
-
初次使用请先打开设置页面,完成激活码注册和检测区域标定
二、注意事项
1. 相关接口使用请参考演示DEMO工程中的代码