MinewDoorLock使用说明

本套SDK仅支持Minew公司出品的蓝牙模块设备。通过SDK可以帮助开发者处理手机和蓝牙模块之间的一切工作,包括:扫描设备,连接设备,向设备写入数据,从设备接收数据等。

设计说明

sdk中使用device + manager模式

开始上手

开发环境

  1. Android Studio
  2. minSdkVersion:19

导入到工程

  1. minewDoorlockLib.jar添加到module的libs文件夹下,并在该modulebuild.gradle中添加如下语句(直接添加依赖):

    implementation files('libs/minewDoorlockLib.jar')
    
    1

    或者右键该jar文件,选择Add as Library,添加到当前module

  2. 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代表所有扫描到的未连接的锁设备
        
    }
});
1
2
3
4
5
6
7
8
9
10
11

连接

连接方式有两种,分为主/从方式,一般说来,一个界面设置的连接方式仅仅支持一种,在界面初始化时就可以去设置了。设置方式分别为:

//主(host)
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mNOTIFYUnlockRecord);

//从
mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mADDUnlockRecord);
1
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() {
        
    }
};
1
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) {

    }
});
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
27
28
29
30
31
32
33
34

最终连接结果可在以下监听器获取

mLockBLEManager.setLockModuleConnChange(new LockModuleConnChange() {
    @Override
    public void onLockConnChange(MLockModule device, ConnectionState status) {

    }
});
1
2
3
4
5
6

注意:onLockConnChange(MLockModule, ConnectionState)中返回的status仅仅只有三种返回值:DeviceLinkStatus_ConnectedDeviceLinkStatus_ConnectFailedDeviceLinkStatus_Disconnect,若需要其余状态则是在LockConnectListener接口中获取

连接完成后,则可去进行开锁、合锁、获取开锁记录、解绑等操作

开锁与合锁

  1. 在界面初始化时设置

    mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mADDUnlockRecord);
    
    1
  2. 设置监听,监听开锁或合锁是否成功或失败,以及合锁或开锁后,锁状态变化

    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
  3. 最好是先判断当前锁状态,每次连接都会去获取锁状态,根据锁状态来判断下一步操作是开锁还是合锁

    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
临时密码开锁
  1. SDK支持对已绑定设备(合锁状态)进行开锁

    MLockModuleOperate.unlockByGuest(mLockModule.getMacAddress(), tempPassword);
    
    1
  2. 其余设置同上

获取开锁记录

  1. 先设置开锁记录操作方式

    mLockBLEManager.getLockBleConnect().writeUnlockRecordFor(LockBleConnectImpl.mNOTIFYUnlockRecord);
    
    1
  2. 设置监听器

    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
  3. 锁存储能力有限,无法保存太多数据,只保存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
    }
});
1
2
3
4
5
6
上次更新:: 2021/1/19下午3:19:00