Skip to content

17 蓝牙锁相关API

liYueAliyun edited this page Sep 19, 2019 · 1 revision

蓝牙锁相关API

蓝牙锁Demo

参考蓝牙Demo工程米家扩展程序工程,里面提供了锁的连接、分享、删除、查询等操作示例。

XmBluetoothManager

/**
 * ApiLevel: 51
 * 安全芯片连接,锁的Owner调用
 */
public abstract void securityChipConnect(String mac, final BleConnectResponse response);

/**
 * ApiLevel: 51
 * 锁的分享设备连接,被分享者调用
 * @param mac 设备的mac
 */
public abstract void securityChipSharedDeviceConnect(String mac, final BleConnectResponse response);

/**
 * ApiLevel: 51
 * 安全芯片数据加密
 * 注意:只有与设备建立了安全连接之后才能调用,使用的是非对称加密,加密后的数据只能设备才能解密
 */
public abstract void securityChipEncrypt(String mac, byte[] data, final BleReadResponse response);

/**
 * ApiLevel: 51
 * 安全芯片数据解密
 * 注意:只有与设备建立了安全连接之后才能调用,使用的是非对称加密,只能解密设备发送过来的加密数据
 */
public abstract void securityChipDecrypt(String mac, byte[] data, final BleReadResponse response);

/**
 * ApiLevel: 51
 * 锁设备分享后的KeyId是否过期
 * @return true:钥匙没有过期,false:钥匙已过期
 */
public abstract boolean isSecurityChipSharedKeyValid(String mac);

/**
 * ApiLevel: 51
 * 安全芯片操作符 开锁
 */
public static final int SECURITY_CHIP_UNLOCK_OPERATOR = 0;
/**
 * ApiLevel: 51
 * 安全芯片操作符 关锁
 */
public static final int SECURITY_CHIP_LOCK_OPERATOR = 1;
/**
 * ApiLevel: 51
 * 安全芯片操作符 反锁
 */
public static final int SECURITY_CHIP_BOLT_OPERATOR = 2;

/**
 * ApiLevel: 51
 * 开锁成功后,设备通过notify返回的state码
 */
private static byte[] SECURITY_CHIP_UNLOCK_STATE = new byte[] {0x00};
/**
 * ApiLevel: 51
 * 关锁成功后,设备通过notify返回的state码
 */
private static byte[] SECURITY_CHIP_LOCK_STATE = new byte[] {0x01};
/**
 * ApiLevel: 51
 * 反锁成功后,设备通过notify返回的state码
 */
private static byte[] SECURITY_CHIP_BOLT_STATE = new byte[] {0x02};

/**
 * ApiLevel: 51
 * 提供支持安全芯片的锁操作
 * 注意:同一时间只能调用一次锁的相关操作(如果在上次操作回调前继续调用,会直接返回失败),另外如果给设备发送了锁的相关操作,但是设备12s内都没有返回数据,为避免中间人攻击,底层会直接断开蓝牙连接
 * @param mac
 * @param operator 1: 开锁,2:反锁
 */
public abstract void securityChipOperate(String mac, int operator, final BleReadResponse response);

/**
 * ApiLevle: 51
 * 广播接收设备是否登录成功
 */
public static final String ACTION_ONLINE_STATUS_CHANGED = "action.online.status.changed";
public static final String EXTRA_MAC = "extra_mac";
public static final String EXTRA_ONLINE_STATUS = "extra_online_status";
public static final int STATUS_LOGGED_IN = 0x50;

/**
 * ApiLevel: 51
 * 获取MD5处理过的token
 * @return
 */
public abstract String getTokenMd5(String mac);

/**
 * ApiLevel: 62
 * 给锁设备提供的获取一次性密码
 * @param mac
 * @param interval 密码的有效时间,单位为分钟,必须 >= 1 并且 <= 60,否则会返回错误。必须与固件中的有效时间保持一致。
 * @param digits 密码的长度,必须 >= 6 并且 <= 8,否则会返回错误。
 * @param response 返回操作成功还是失败,如果操作成功则返回一次性密码
 */
public abstract void getOneTimePassword(String mac, int interval, int digits, Response.BleResponseV2<int[]> response);

XmPluginHostApi

/**
 * ApiLevel:51
 * 分享电子钥匙
 *
 * @param model 设备model
 * @param did 分享者的did
 * @param shareUid 分享目标的uid
 * @param status 分享类别,1:暂时,2:周期,3:永久
 * @param activeTime 生效时间 UTC时间戳,单位为s
 * @param expireTime 过期时间 UTC时间戳,单位为s
 * @param weekdays 生效日期(星期几,例如周一和周三对应1和3,[1, 3],星期天对应0),仅在status=2时不可为空
 * @param readonly true:被分享人不可接收锁push,false:被分享人可接收锁push,(family关系用户不受这个字段影响)
 * @param callback
 */
public void shareSecurityKey(final String model, final String did, String shareUid, final int status, final long activeTime, final long expireTime,
                             final List<Integer> weekdays, final boolean readonly, final Callback<Void> callback);

/**
 * ApiLevel:51
 * 更新分享的电子钥匙信息
 *
 * @param model 设备的model
 * @param did 分享者的did
 * @param keyId 电子钥匙的keyId
 * @param status 分享类别,1:暂时,2:周期,3:永久
 * @param activeTime 生效时间 UTC时间戳,单位为s
 * @param expireTime 过期时间 UTC时间戳,单位为s
 * @param weekdays 生效日期(星期几,例如周一和周三对应1和3,[1, 3]),仅在status=2时不可为空
 * @param callback
 */
public void updateSecurityKey(String model, String did, String keyId, int status, long activeTime, long expireTime, List<Integer> weekdays, Callback<Void> callback);

/**
 * ApiLevel:51
 * 删除共享的电子钥匙
 *
 * @param model 设备的model
 * @param did 分享者的did
 * @param keyId 分享电子钥匙的KeyId
 * @param callback
 */
public void deleteSecurityKey(String model, String did, String keyId, final Callback<Void> callback);

/**
 * ApiLevel:51
 * 获取所有分享的电子钥匙信息
 *
 * @param model 设备model
 * @param did 分享者的did
 * @param callback
 */
public void getSecurityKey(String model, String did, final Callback<List<SecurityKeyInfo>> callback);

/**
 * ApiLevel:51
 * 获取UTC时间,单位为ms
 * 被废弃了,使用getUTCFromServer接口
 */
@Deprecated
public abstract long getUTCTimeInMillis();

/**
 * ApiLevel:51
 * 从服务器获取UTC时间,单位为秒(返回-1,说明解析出现异常,当做错误处理)
 * @param callback
 */
public void getUTCFromServer(String model, Callback<Long> callback);

/**
 * ApiLevel: 51
 * 获取蓝牙锁绑定的时间
 * @param model
 * @param did
 * @param callback
 */
public void getBleLockBindInfo(String model, String did, Callback<String> callback);