1

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() を呼び出したときに既に送信されています)。問題は、そのコマンドの送信方法がわからないことです。

4

0 に答える 0