Хорошо, я понял это.
Мое первое впечатление, что этот BroadcastReceiver
обрабатывает эту систему Dialog
, было неверным. Мы используем этот приемник только для двойной проверки BOUND_STATE
. Это не имеет ничего общего с диалогом сопряжения, это предположение было ошибкой.
Итак, первый важный факт заключается в том, что для сопряжения необходим только метод createBond()
. Остальное только о его создании.
Самый важный факт - это метод сопряжения «Просто работает». Там мы можем прочитать о безопасности BLE и о "Просто работает". Как вы можете прочитать здесь:
В этом методе ТЗ устанавливается на 0.
TK - это временный ключ.
В этот момент вернемся к нашему методу Android createBond()
. В документации мы можем прочитать:
Системные службы Android будут обрабатывать необходимые взаимодействия с пользователем для подтверждения и завершения процесса соединения.
Но если он обрабатывает взаимодействия с пользователем, почему он не отображает диалог? Мы находим ответ, когда объединяем эти две вещи вместе. Если для параметра «Временный ключ» задано значение «0», отображение диалогового окна «Сопряжение ключа» не требуется для обработчика Android.
Есть небольшие изменения между Bluetooth 4.0 / 4.1 и Bluetooth 4.2, но это не должно влиять на это поведение. Вы можете прочитать больше об этом здесь .
TL: DR Использование метода сопряжения «Просто работает» означает, что значение временного ключа установлено в 0, что означает, что оно нам не нужно во время процесса сопряжения. createBound()
метод обрабатывает только необходимые взаимодействия с пользователем, поэтому, когда нам не нужен ключ сопряжения, нам не нужно взаимодействовать с пользователем по этому поводу. Вот почему Dialog
не отображается - потому что в этом нет необходимости.