| 版本记录 | 时间 | 修改者 | 日志 | | :---: | :---: | :---: | :---: | | 1.0.0 | 2025.01.07 | 陈强 | 初版 | | 1.1.0 | 2025.02.08 | 陈强 | 移除部分描述 |

1. **前言**

针对现在公司现有的光交锁产品进行功能合并和兼容处理,包含NFC、蓝牙读写器、蓝牙锁、USB锁等四种方式。

2. **流程图**

![](https://cdn.nlark.com/yuque/0/2025/png/600469/1736320210281-7cf87e30-06dc-4307-8a67-04bfc26d9217.png)

3. **配置**

3.1. **密钥、appID申请**

使用本SDK之前,请开发联系商务,并提供app的包名以便获取appID和密钥,后续激活SDK使用

3.2. **权限配置**

```java ```

3.3. 开锁密码

开锁时,需要对应的密码,集成SDK时建议做好密码管理。开锁时传入对应的密码。

4. **参数说明**

4.1. **接口数据(采用Map集合)**

| 键(key) | 值(value) | 类型 | 备注 | | :---: | :---: | :---: | :---: | | lockStatus | 1或0 | String | 1:开启
0:关闭 | | nfcElectricity | | String | NF电量 | | solarEnergyElectricity | | String | 太阳能电量 | | batteryElectricity | | String | 电池电量 | | lockBeamStatus | 1或0 | String | 锁梁状态(运营商锁)
1:已脱落
0:锁梁正常 | | lockTypeC | 1或0 | String | TypeC状态(运营商锁)
1:已连接
0:未连接 | | lockBle | 1或0 | String | 蓝牙状态(运营商锁)
1:已连接
0:未连接 | | birth | | String | 出厂日期(运营商锁) | | version | | String | 固件版本号 | | hardwareVersion | | String | 硬件版本号 | | sn | | String | 智能锁序号 | | unlockTimes | | String | 开锁次数 | | status | | String | 网络状态(NB锁) | | pw | | String | 网络信号强度(NB锁) | | read | | String | 读取MCU状态 | | open | | String | 读取传感器状态(门状态) | | localStatus | | String | 读取传感器状态(锁舌状态) |

4.2. **设备枚举类型**

**MkdLockTypeEnum(设备类型)** | 类型 | 说明 | | --- | --- | | **MKD_LOCK_TYPE_NFC** | 通过手机的NFC功能实现开锁,适用于支持NFC功能的设备 | | **MKD_LOCK_TYPE_READER** | 利用蓝牙读写器进行开锁,适合需要通过蓝牙连接的场景 | | **MKD_LOCK_TYPE_BLE** | 通过手机蓝牙与锁具连接进行开锁 | | **MKD_LOCK_TYPE_USB** | 通过手机外接USB设备实现开锁,适用于需要物理连接的情况 |

5. **接入流程**

5.1. **管理类-****MkdLockManagerNewer**

5.2. **激活SDK**

```java /** * 初始化鉴权 * * @param appID AppID * @param appSecret 密钥 * @return boolean true:激活成功 false:激活失败 */ public boolean initWithAppID(String appID, String appSecret,Application application) ```

5.3. **设备类型设置**

```java /** * 根据不同的锁类型切换当前的锁类型 * 此方法主要用于在应用中切换锁的类型,以便适应不同的安全或使用需求 * * @param mkdLockTypeEnum 新的锁类型,通过MkdLockTypeEnum枚举指定 */ public void changeCurrentLockType(MkdLockTypeEnum mkdLockTypeEnum) ```

5.4. **蓝牙**

5.4.1. **设备搜索**
```java /** * 开始搜索设备 * * @param timeOut 超时设置 * @param scanListener 设备搜索回调 */ void startScan(int timeOut, MkdScanListener scanListener); ``` ```java public interface MkdScanListener { //开始扫描 void onScanStart(); //停止扫描 void onScanStop(); //获取扫描结果 void onScanResult(Device device, boolean isConnectedBySys); //扫描错误 void onScanError(String errorMsg); } ```
5.4.2. **停止搜索**
```java public void stopScan() ```
5.4.3. **设置搜索过滤条件**
```java public void setDeviceScanPrefix(String... prefix) ```
5.4.4. **设备连接**
```java /** * 连接设备 * @param device 设备对象 * @param listener 连接监听器 */ public void connectDevice(Device device, MkdBleConnectListener listener) ``` ```java /** * 连接设备 * @param device 设备标识字符串 * @param listener 连接监听器 */ public void connectDevice(String device, MkdBleConnectListener listener) ``` ```java public interface MkdBleConnectListener { void connectSuccess (Device device); void connectFailed(String msg); void connectClose(); } ```
5.4.5. **设备断开**
```java public void disConnectDevice() ```
5.4.6. **释放资源**
```java public void releaseAllConnection() ```
5.4.7. **其他**
```java //是否真正扫描设备中 public boolean isScanning() //移除扫描监听 public void removeScanListener() //是否连接设备 public boolean isBleDeviceConnect() ```

5.5. **NFC**

5.5.1. **NFC Tag监听**
```java //注意:此处未使用onNewIntent方式来获取NFC Tag的方式,是由于在部分手机设备上 //存在Intent携带的Tag为null,导致无法使用NFC NfcAdapter mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); mNfcAdapter.enableReaderMode(activity, new NfcAdapter.ReaderCallback() { @Override public void onTagDiscovered(Tag tag) { Log.e("onTagDiscovered", "tag = " + tag); //接收获取的NFC 信息便于后续连接处理 } }, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_NFC_B | NfcAdapter.FLAG_READER_NFC_F | NfcAdapter.FLAG_READER_NFC_V | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, null); ```
5.5.2. **创建NFC意图**
```java public void createPendingIntent(Activity activity) ```
5.5.3. **开启NFC前台分发**
```java public void enableForegroundDispatch(Activity activity) ```
5.5.4. **关闭NFC前台分发**
```java public void disableForegroundDispatch(Activity activity) ```
5.5.5. **连接NFC**
```java public void connectTag(Tag mTag, MkdNfcConnectStatusListener listener) ``` ```java public interface MkdNfcConnectStatusListener { /** * 连接状态 * @param status true已连接 false未连接 */ void connectStatus(boolean status); } ```

5.6. **API方法**

5.6.1. **添加蓝牙读写器寻卡监听**
```java public void addReceiveRWSearchCardListener(MkdLockManagerListener listener) ```
5.6.1.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | --- | --- | | hasCard | String | “1”or"0" | "1":有卡
“0”:无卡 | | uid | String | | mac地址 | | protocol | String | | 类型
“default”全部
“ISO14443A”14443A NFC协议
“ISO14443B”14443B NFC协议
“ISO15693:15693 NFC协议 |
5.6.2. **查询蓝牙读写器状态**
```java public void queryBleReaderWriterStatus(MkdLockManagerListener listener) ```
5.6.2.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | :---: | --- | | rwPowerMV | String | | 读写器电量 | | rwPowerPercent | String | | 读写器电量百分 | | rwHW | String | | 读写硬件版本 | | rwSW | String | | 读写器软件版本 |
5.6.3. **读取锁的基本信息**
```java public void readLockBasicInfoSuccess(MkdLockManagerListener listener) ```
5.6.3.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | :---: | --- | | sn | String | | 序号 | | mac | String | | mac地址 |
5.6.4. **读取锁的状态和电量**
```java public void readStatusAndElectricity( MkdLockManagerListener listener) ```
5.6.4.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | --- | --- | | lockStatus | String | 1或0 | 1:开启
0:关闭 | | nfcElectricity | String | | NF电量 | | solarEnergyElectricity | String | | 太阳能电量 | | batteryElectricity | String | | 电池电量 | | lockBeamStatus | String | 1或0 | 锁梁状态(LK02-BT运营商锁)
1:已连接
0:未连接 | | lockTypeC | String | 1或0 | TypeC状态(LK02-BT运营商锁)
1:已连接
0:未连接 | | lockBle | String | 1或0 | 蓝牙状态(LK02-BT运营商锁)
1:已连接
0:未连接 | | birth | String | | 出厂日期(LK02-BT运营商锁) |
5.6.5. **读取开锁次数**
```java public void readUnlockTimes(MkdLockManagerListener listener) ```
5.6.5.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | :---: | --- | | unlockTimes | String | | 累计开锁次数 |
5.6.6. **读取锁的固件版本**
```java public void readFWVersion(MkdLockManagerListener listener) ```
5.6.6.1. **返回****数据**
| 参数key | 类型 | | 说明 | | --- | --- | :---: | --- | | version | String | | 固件版本号 | | hardwareVersion | String | | 硬件版本号 |
5.6.7. **密钥开锁**
```java //encryptedPassword:获取的开锁密钥 //listener:开锁结果回调,包含充电进度、开锁失败、开锁成功 public void unlockWithSecretKey(String encryptedPassword, MkdLockManagerProgressListener listener) ```
5.6.8. **资源释放**
```java public void release() ```