一、非钉终端应用接入指南
⚠ 需要接入者具备基本的android开发者专业能力标准即可完成以下对接,以下文字输出涉及开发相关专业技术知识
⚠ 该sdk需要配套魔点最新的MOS版本使用(关于设备版本可询问技术支持确认)
1.环境搭建
1.1 sdk集成(环境搭建)
第三方应用开发者拿到demo中内置的魔点开放sdk后,需要把aar文件置于自身android项目中的libs目录下,通过gradle加载这个开放sdk

⚠ sdk版本会持续更新 但sdk前缀格式固定,具体可参考最新版本demo,并采用demo内置的sdk文件进行集成
1.2 sdk引入
在项目中build.gradle的dependencies添加如下代码
implementation fileTree(include: [‘*.aar’], dir: ‘libs’)
⚠ name与aar的名称保持一致,这两个aar都需要放入同一层级
1.3 NDK依赖
build.gradle中添加

1.4 第三方依赖导入
build.gradle中添加

⚠ 基础SDK有使用到该三方类库网络请求组件/greendao数据库/collections库依赖,请开发者集成上述依赖到自身项目中
2.基础开放能力配置
2.1启动配置
调用开放sdk前需要在AndroidManifest.xml文件中配置启动界面的action,魔点应用会在每次启动后判断第三方应用是否存在,如果存在则会拉起第三方应用
//示范例子(第三方应用首页)<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="com.moredian.open.start" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
⚠ 上述代码标红的部分为第三方应用开发者需要关注的点,在自己开发的应用项目中的主页面(首页)添加的代码
2.2初始化(MdOpenServer)
调用魔点开放open sdk之前,需要通过MdOpenServer初始化sdk,需传入appId和appKey,可通过魔点开放平台->终端安卓应用->行业终端应用-创建项目(应用)获取
private void initOpenServer() {MdOpenServer.getInstance().init(this, this);}
2.3数据监听
初始化成功后再去注册数据回流监听
@Overridepublic void onInitCallBack(boolean isSuccess, String message) {Log.d(TAG, "onInitCallBack: isSuccess=" + isSuccess + ",message=" + message);}
2.4 SDK注销
应用或者界面销毁,初始化回调失败,需要通过_unRegisterListener_注销历史的回流监听,否则下次再次注册,会返回多条相同的数据
MdOpenServer.getInstance().unRegisterListener(callback);
2.5业务接口名词解释
OpenInitListener 初始化回调
public interface OpenInitListener {void onInitCallBack(boolean isSuccess, String message);}
| 回调方法 | 参数 | 类型 | 描述 |
|---|---|---|---|
| onInitCallBack | isSuccess | boolean | sdk初始化是否成功 |
| message | string | 返回__message |
AuthCallBack 授权回调
public interface AuthCallBack {void onAuthBack(boolean var1, String var2);}
| 回调方法 | 参数 | 类型 | 描述 |
|---|---|---|---|
| onAuthBack | isSuccess | boolean | 授权是否成功 |
| message | string | 授权结果信息 |
OpenResultListener 数据回调
public interface OpenResultListener {void resultCallBack(String action, String result);void onRecognizeWithCorpFace(String result, ParcelFileDescriptor pfd);}
| 回调方法 | 参数 | 类型 | 描述 |
|---|---|---|---|
| resultCallBack | action | string | 调用的开放方法 |
| result | string | 返回结果 | |
| onRecognizeWithCorpFace | result | string | 识别回调(json) |
| pfd | ParcelFileDescriptor | 识别人脸数据 |
sdk初始化
public void init(@NonNull Context context, OpenInitListener openInitListener)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| init | context | Context | 是 | 上下文 |
| openInitListener | OpenInitListener | 是 | 初始化回调 |
获取授权
public void getAuth(String appId, String appKey, AuthCallBack authCallBack)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| getAuth | appId | String | 是 | 终端开放平台创建的appId |
| appKey | String | 是 | 终端开放平台创建的appKey | |
| authCallBack | AuthCallBack | 是 |
sdk注销
应用销毁后应及时注销sdk,注销后,sdk会断开连接,同时释放持有的资源
public abstract void release();
注册数据回流监听
public abstract void registerListener(OpenResultListener listener);
| 方法名 | 参数 | 是否必填 | 描述 |
|---|---|---|---|
| registerListener | OpenResultListener | 是 | 注册回调监听 |
注销数据回流监听
public abstract void unRegisterListener(OpenResultListener listener);
| 方法名 | 参数 | 是否必填 | 描述 |
|---|---|---|---|
| unRegisterListener | OpenResultListener | 是 | 注册回调监听 |
获取sdk版本号
public abstract int getVersionCode();
获取sdk版本名
public abstract String getVersionName();
获取设备信息
public abstract String getDeviceBaseInfo();
返回结果:{“sn”:”090902190730KN0015”,”romVersion”:20124,”romVersionName”:”2.1.24.0”,”appVersion”:2158,”appVersionName”:”V1001.2.0.0-xtest”}
| 参数名 | 类型 | 描述 |
|---|---|---|
| sn | string | 设备唯一标识 |
| romVersion | long | rom版本号 |
| romVersionName | string | rom版本名 |
| appVersion | int | 魔点app版本号 |
| appVersionName | string | 魔点app版本名 |
获取设备device host模式
public abstract int getDeviceHostMode();
返回结果:
return 1 host模式 0 device模式 -1 获取失败
设备系统每次启动默认处于host模式
device模式:usb线连接adb时设备必须处于device模式
host模式:以太网正常工作时必须处于host模式
切换设备device host模式
public abstract void switchDeviceHostMode(int model);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| switchDeviceHostMode | model | int | 是 | 设置模式 (1 host模式 0 device模式) |
每次切换模式后,因为切换存在延迟,若需要通过getDeviceHostMode获取当前模式,需要延迟1秒以上,否则获取到的状态可能有误
开启网络adb
public abstract void enableAdb(boolean enable);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| enableAdb | enable | boolean | 是 | true开启 false 关闭 |
开启设备调试输出
public abstract void enableLogcat(boolean enable);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| enableLogcat | enable | boolean | 是 | true开启 false 关闭 |
设置刷脸模式
public abstract void setRecognizeMode(int mode);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| setRecognizeMode | model | int | 是 | 1多人识别 2单人识别 |
调用刷脸
public abstract void detectFace(int timeOut);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| detectFace | timeOut | int | 是 | 跳转到刷脸页后,超时自动返回三方应用,默认60秒 |
结果通过_IOpenListener回调返回,详细可参考demo
回调action:detect_face
识别成功json:
{“data”:{“personId”:”10021”,”personName”:”xxx”,”userType”:1},”message”:”识别成功”,”result”:”200”}
识别失败json:
{“message”:”识别失败,陌生人”,”result”:”400”}
刷卡回调
{“data”:”0123456789”,”message”:”刷卡成功”,”result”:”200”}
调用扫码
public void scanQrCode(int timeOut)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| scanQrCode | timeOut(秒) | int | 否 | 跳转到扫码页后,超时自动返回三方应用,默认60秒 |
回调action:scan\qr\code
成功json:
{“data”:”www.moredian.com”,”result”:”200”,”message”:”扫码成功”}
失败json:
{“message”:”设备不支持扫码”,”result”:”400”}
通过卡号获取人员信息
public abstract void getUserInfoByCard(@NonNull String cardNo);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| getUserInfoByCard | cardNo | string | 是 | 通过卡号获取用户信息,需要提前在魔点微应用绑定人员和卡号关系 |
回调action:get\user\info
成功json:
{“data”:{“cardNum”:”2037175851”,”dingUserId”:”1000”,”id”:32909,”name”:”xxx”,”status”:1},”message”:”query card info success”,”result”:”200”}
失败json:
{“message”:”query card info fail”,”result”:”400”}
重启设备
public abstract void reboot();
开门
public abstract void openDoor(boolean isUserDefaultTime, long openDoorTime);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| openDoor | isUserDefaultTime | boolean | 是 | 是否使用开放服务默认开门时间 |
| openDoorTime | long | 是 | 毫秒,自定义开门时间,isUserDefaultTime false生效 |
设备音量配置
设置了不在0-100范围内的数据,sdk会抛出异常,需要手动捕获
public abstract void controlVolume(int volume);
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| controlVolume | volume | int | 是 | 配置设备整体音量大小0~100 |
返回第三方应用
public abstract void back();
设备led补光灯亮度配置
设置了不在0-255范围内的数据,sdk会抛出异常,需要手动捕获
public void controlLed(int value)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| controlLed | value | int | 是 | 配置设备整体led亮度大小0~255 |
设备屏幕亮度配置
设置了不在0-255范围内的数据,sdk会抛出异常,需要手动捕获
public void controlScreenLight(int value)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| controlScreenLight | value | int | 是 | 配置设备整体屏幕亮度0~255 |
无线网络配置
/*** 无线网络配置* @param timeOut 无线网络配置超时时间*/@Overridepublic void startWifiSet(int timeOut)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| startWifiSet | timeOut(秒) | int | 否 | 跳转到无线网配置界面,超时自动返回三方应用,默认60秒 |
有线网络配置
/*** 有线网络配置* @param timeOut 有线网络配置超时时间*/@Overridepublic void startEtherSet(int timeOut)
| 方法名 | 参数 | 类型 | 是否必填 | 描述 |
|---|---|---|---|---|
| startEtherSet | timeOut(秒) | int | 否 | 跳转到有线网配置界面,超时自动返回三方应用,默认60秒 |
回调action: start_ethernet
成功直接跳转
失败json:
{“message”:”网线未插入”,”result”:”400”}
3.问题排查及日志抓取
3.1 日志采集/提供
sdk内置异常日志采集分析能力,如您集成sdk后 设备在调试/日常运行过程中遇到相关问题,可提供相关日志并联系我们开发进行分析答疑解惑。sdk日志占比存储空间极小,且内置自动清除能力,无需担心sdk日志过大导致设备载荷异常
日志目录在设备sd卡外部存储目录下面,请不要随意清除该部分日志
/sdcard/Android/data/XXXXX/files/logs/MoreDian
⚠XXXXX为您开发的应用的具体包名下