我正在开发一个使用 Mi Band 1s 来跟踪心率的应用程序。现在我实现了配对(通过身份验证)。但我不知道如何取消配对 Mi Band。
对 Mi Band 的取消配对进行编码不是我的首要任务,但我想用我的应用程序执行此操作,而不是每次我想执行配对(使用身份验证电机)时都去 MiFit 配对 mi Band 并取消配对我的应用程序。
我使用以下序列进行初始化:
private void initialize() {
// Enable notifications
addCall(enableNotifications());
// Set low latency to do a faster initialization
addCall(setLowLatency());
// Reading date for stability - TODO - Check if this is really necessary
addCall(requestDate());
// Authentication
addCall(pair());
addCall(requestDeviceInformation()); // Needed to send user info to the device
addCall(requestDeviceName());
addCall(sendUserInfo()); // Needed to authenticate
addCall(checkAuthentication()); // Clear the queue when not authenticated
// Other Initializations
addCall(sendCommand(COMMAND.SET_WEAR_LOCATION_RIGHT)); // Set wear location // TODO - Check
addCall(setHeartRateSleepSupport()); // TODO - Check
addCall(setFitnessGoal(1000)); // TODO - Check and set fitness by the app
// Enable other notifications // TODO - Check
addCall(enableNotificationsFrom(UUID_CHAR.REALTIME_STEPS));
addCall(enableNotificationsFrom(UUID_CHAR.ACTIVITY_DATA));
addCall(enableNotificationsFrom(UUID_CHAR.BATTERY));
addCall(enableNotificationsFrom(UUID_CHAR.SENSOR_DATA));
// Enable Heart Rate notifications
addCall(enableHeartRateNotifications());
// Other Initializations
addCall(setCurrentDate());
addCall(requestBattery());
// Set high latency to get an stable connection
addCall(setHighLatency());
// Finish initialization - device is ready to make other calls
//addCall(setInitialized()); // TODO
}
如您所见,仍然有一些电话我必须检查他们是否真的按照他们所说的去做。但目前它似乎正在工作。我将不胜感激任何其他评论(不仅是关于如何取消配对)。
编辑
我开始捕获官方应用程序和我的应用程序的蓝牙数据包(我还用它的 uuid 映射了所有处理程序,即使我不知道是什么特征)。
好的,所以,这是从 MiFit 断开连接的捕获:
如您所见,主机仅向频段发送 4 个数据包:
- 其中两个是用于读取步骤和禁用步骤通知的 ATT 数据包。
- 另外两个是 HCI 命令。
我想我只需要发送第二个 HCI 命令(当我调用 disconnect() 或 close() 时已经发送了第一个命令)。问题是我不知道如何发送该命令。