MinewDoorLock使用说明
本套SDK仅支持Minew公司出品的蓝牙模块设备。通过SDK可以帮助开发者处理手机和蓝牙模块之间的一切工作,包括:扫描设备,连接设备,向设备写入数据,从设备接收数据等。
设计说明
sdk中使用device + manager模式
开始上手
开发环境
- Android Studio
- minSdkVersion:19
导入到工程
将
minewDoorlockLib.jar
添加到module的libs文件夹下,并在该module
的build.gradle
中添加如下语句(直接添加依赖):implementation files('libs/minewDoorlockLib.jar')
1或者右键该jar文件,选择
Add as Library
,添加到当前module在
AndroidManifest.xml
需要以下权限,如果targetSdkVersion
大于23,则需要做权限管理以获取权限<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
1
2
3
4
开始开发
扫描阶段
首先需要启动蓝牙并打开位置开关,获取MLockBLEManager
单例,并设置需要的监听器
//获取管理类单例
mLockBLEManager = MLockBLEManager.getInstance(this);
//设置监听器
mLockBLEManager.startScan(new ScanLockResultListener() {
@Override
public void onScanLockResult(@NonNull List<MLockModule> result) {
//监听扫描,将扫描到的设备添加到列表,result代表所有扫描到的未连接的锁设备
}
});
2
3
4
5
6
7
8
9
10
11
连接
连接方式有两种,分为主/从方式,一般说来,一个界面设置的连接方式仅仅支持一种,在界面初始化时就可以去设置了。设置方式分别为:
//主(host)
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mNOTIFYUnlockRecord);
//从
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mADDUnlockRecord);
2
3
4
5
设备连接成功后,如果该设备是第一次连接,则需要设置密码,否则需要验证密码。密码设置或验证成功后,则开始写入5个临时密码,这5个临时密码可以用来开锁,且只能使用一次
mMLockBLEManager.connect(module,mLockConnectListener);
mLockConnectListener = new LockConnectListener() {
@Override
public void onAuthStateChange(final boolean isAuthSuccess, final MLockModule mLockModule) {
}
@Override
public void bindSetting(final MLockModule mLockModule) {
}
@Override
public void bindPswFail(String macAddress) {
}
@Override
public void disConnect() {
}
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
连接过程需要写入临时开锁密码,只能用写入成功的临时密码去开锁,监听写入过程如下:
mMLockBLEManager.setOnTempPswWriteListener(new OnTempPswWriteListener() {
/**
* 开始写入临时密码,可以在此做些准备工作
*/
@Override
public void onStartWriteTempPsw(final String macAddress) {
}
/**
* 成功写入的临时密码
*/
@Override
public void onWritePswSuccess(String macAddress, String... password) {
}
/**
* 写入临时密码失败
*/
@Override
public void onWritePswFailure(String macAddress, String password) {
}
/**
* 密码全部写入成功
*/
@Override
public void onAllWriteSuccess(final String macAddress) {
}
});
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
最终连接结果可在以下监听器获取
mLockBLEManager.setLockModuleConnChange(new LockModuleConnChange() {
@Override
public void onLockConnChange(MLockModule device, ConnectionState status) {
}
});
2
3
4
5
6
注意:onLockConnChange(MLockModule, ConnectionState)
中返回的status
仅仅只有三种返回值:DeviceLinkStatus_Connected
、DeviceLinkStatus_ConnectFailed
、DeviceLinkStatus_Disconnect
,若需要其余状态则是在LockConnectListener
接口中获取
连接完成后,则可去进行开锁、合锁、获取开锁记录、解绑等操作
开锁与合锁
在界面初始化时设置
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mADDUnlockRecord);
1设置监听,监听开锁或合锁是否成功或失败,以及合锁或开锁后,锁状态变化
mLockBLEManager.setOnUnlockListener(new OnUnlockListener() { @Override public void unlockSuccess(String macAddress) { } @Override public void unlockFailure(String macAddress) { } @Override public void lockSuccess(String macAddress) { } @Override public void lockFailure(String macAddress) { } @Override public void getLockStatus(String macAddress, final boolean lockStatus) { } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26最好是先判断当前锁状态,每次连接都会去获取锁状态,根据锁状态来判断下一步操作是开锁还是合锁
String lockStatus = mLockBLEManager.getLockStatus().get(mMacAddress); if (lockStatus.equals(Constant.NOTIFY_LOCK_STATUS_UNLOCK)) { LogUtil.e("LockDetail", "will lock"); MLockModuleOperate.lockByHost(mMacAddress, mLockModule.getPassword()); } else if (lockStatus.equals(Constant.NOTIFY_LOCK_STATUS_LOCK)) { LogUtil.e("LockDetail", "will unlock"); MLockModuleOperate.unlockByHost(mMacAddress, mLockModule.getPassword()); } else { ToastUtil.showToast(getString(R.string.lock_status_exception)); }
1
2
3
4
5
6
7
8
9
10
临时密码开锁
SDK支持对已绑定设备(合锁状态)进行开锁
MLockModuleOperate.unlockByGuest(mLockModule.getMacAddress(), tempPassword);
1其余设置同上
获取开锁记录
先设置开锁记录操作方式
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mNOTIFYUnlockRecord);
1设置监听器
mLockBLEManager.setOnReadUnlockRecordListener(new OnReadUnlockRecordListener() { @Override public void readUnlockRecord(final Unlock unlock) { } @Override public void readRecordComplete(final Unlock unlock) { } @Override public void newestUnlockRecord() { } @Override public void emptyUnlockRecord() { } });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21锁存储能力有限,无法保存太多数据,只保存30条开锁记录。每次读取开锁记录时,如果本地已经有保存开锁记录,则发送本地最后一条开锁记录的时间,以
yyyyMMddHHmmss
格式发送,否则发送MLockModuleOperate.EMPTY_UNLOCK_RECORD
,如下:MLockModuleOperate.readUnlockRecord(mMacAddress, "20190320144000"); //或: MLockModuleOperate.readUnlockRecord(mMacAddress, MLockModuleOperate.EMPTY_UNLOCK_RECORD);
1
2
3
4
解绑
示例如下:
LockUtil.unbind(mLockModule, new LockOperationCallback() {
@Override
public void onOperation(final boolean success, BluetoothException mtException) {
//unbind successfully
}
});
2
3
4
5
6