Отключение адаптера Bluetooth без вызова onConnectionStateChange Android 8.1.0

Отключение блютуза в настройках системы Android дает нам BluetoothGattCallback.onConnectionStateChange() звонок в Android ‹ 27 (Oreo). Однако, когда я пробую это на своем Pixel или Nexus 5X (Android 8.1.0), я не получаю этот обратный вызов. Есть ли какое-то изменение в коде Bluetooth, из-за которого мы не получаем уведомления о BluetoothProfile.STATE_DISCONNECTED с изменением настроек Bluetooth. Я замечаю, что устройство отключается. Также при выключении устройства BLE вызывается обратный вызов. Любое понимание ценится!

Зарегистрировано как проблема здесь проблема Google


person Dhananjay Suresh    schedule 25.04.2018    source источник
comment
Вы должны проверить BluetoothGatt.STATE_DISCONNECTING или BluetoothGatt.STATE_DISCONNECTED в обратном вызове соединения вместо BluetoothProfile   -  person HawkPriest    schedule 18.07.2018
comment
@HawkPriest BluetoothGatt и BlueoothProfile используют одни и те же константы для STATE_DISCONNECTED. BluetoothGatt реализует BluetoothProfile.   -  person Dhananjay Suresh    schedule 18.07.2018
comment
Вы смогли это решить? Я столкнулся с той же проблемой.   -  person Adrian    schedule 18.02.2020
comment
@ Адриан Я не был, и я не знаю, были ли у них какие-либо резолюции. Я покинул проект до того, как смог придумать решение.   -  person Dhananjay Suresh    schedule 12.03.2020


Ответы (1)


Я думаю, это ожидаемо, или, по крайней мере, это всегда было поведением. Когда Bluetooth отключается (или умирает по какой-либо причине), процесс демона Bluetooth завершает работу. Но это тот же процесс, который также отправляет ваши обратные вызовы GATT. Если процесс завершен, он не может отправлять обратные вызовы.

Используйте https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#ACTION_STATE_CHANGED вместо того, чтобы определять, когда Bluetooth выключен, и в это время вы должны просто пойти и закрыть все объекты BluetoothGatt.

person Emil    schedule 03.06.2020