Mi Band 1s を使用して心拍数を追跡するアプリを開発しています。とりあえずペアリング(認証あり)できました。しかし、Mi Band のペアリングを解除する方法がわかりません。
Mi Band のペアリング解除をコード化することは私の最優先事項ではありませんが、MiFit に行くのではなく、自分のアプリでそれを行いたいと思います。私のアプリ。
ここに、アプリと、私が検索/計算した/などのプロトコルがあります。
次のシーケンスを使用して初期化を行います。
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
}
ご覧のとおり、本当に彼らの言う通りに行動しているかどうかを確認しなければならない電話がまだいくつかあります。しかし、現時点では機能しているようです。(ペアリングを解除する方法だけでなく)他のコメントをいただければ幸いです。
編集
公式アプリケーションと自分のアプリケーションの Bluetooth パケットのキャプチャを開始しました (また、特性が何であるかがわからなくても、すべてのハンドラーをその uuid にマップしました)。
わかりました、これは MiFit からの切断のキャプチャです:
ご覧のとおり、ホストは 4 つのパケットのみをバンドに送信します。
- そのうちの 2 つは、ステップを読み取り、ステップ通知を無効にするための ATT パケットです。
- 他の 2 つは HCI コマンドです。
2 番目の HCI コマンドを送信するだけでよいと思います (最初のコマンドは、disconnect() または close() を呼び出したときに既に送信されています)。問題は、そのコマンドの送信方法がわからないことです。