У меня проблема с подключением устройства BLE на Android. Первое подключение к устройству, которое включает в себя соединение, является успешным, и я могу прочитать все характеристики, и соединение остается стабильным.
Когда я убью приложение или отключусь вручную, и попробуйте снова подключиться к устройству с помощью того же кода, кроме самого соединения, я отключен от Android с кодом ошибки 22, что означает «Соединение завершено локальным хостом».
Есть ли какая-либо разница под капотом со стороны Android в этих двух сценариях, о которых я не знаю? Я использую в основном код учебника, который я могу предоставить в случае необходимости, но я пробовал в основном все: от изменения параметров gatt до автоматического подключения / нет, добавив BluetoothDevice.TRANSPORT_LE
в качестве транспортного флага и все еще ничего.
Эта проблема продолжает происходить на моем Pixel, Moto G4 и всех последних устройствах Nexus.
Периферийное устройство использует микросхему Qualcomm CSR1010 uEnergy, является рекламой и должно быть сопряжено, чтобы установить соединение. Вот фрагменты соединения:
val bondCreated = device.createBond()
В приемнике Broadcast изменения состояния связи я вызываю методы подключения. Я попытался поэкспериментировать с этими двумя методами, опустить один и другой, изменить параметры, но ничего
bluetoothGatt = device.connectGatt(context, false, gattCallback, BluetoothDevice.TRANSPORT_LE) bluetoothGatt?.connect()
Если я получаю информацию об отключении, я звоню:
bluetoothGatt?.close() bluetoothGatt?.disconnect()
И я пытаюсь подключиться снова, используя тот же код, что и выше
Я уже пробовал задерживать всюду на каждой игре gatt, но все равно не добился успеха. Изменение автоматического подключения к true после того, как я отключен Android, не работает.
Я также пробовал некоторые сторонние приложения iOS, и все они подключаются к устройству без проблем. Их версии Android всегда отключаются так же, как и мои.
Не могли бы вы оказать любую помощь? Он будет очень признателен.
Журналы находятся здесь:
D / BleGattController: УСТРОЙСТВО УЖЕ ОБНАРУЖЕН: Устройство
D / BluetoothGatt: connect () – устройство: 40: 80: 08: AF: DC: 6B, auto: false
D / BluetoothGatt: registerApp ()
D / BluetoothGatt: onClientRegistered () – status = 0 clientIf = 8
D / BluetoothGatt: onClientConnectionState () – status = 0 clientIf = 8 device = 40: 80: 08: AF: DC: 6B
D / BleGattController $ gattC: onConnectionStateChange 0 – подключено
D / BleGattController $ gattC: STATE_CONNECTED
D / BluetoothGatt: onConnectionUpdated () – Device = 40: 80: 08: AF: DC: 6B interval = 6 latency = 0 timeout = 500 status = 0
D / BluetoothGatt: onClientConnectionState () – status = 22 clientIf = 8 device = 40: 80: 08: AF: DC: 6B
D / BleGattController $ gattC: onConnectionStateChange 22 – отключен
D / BleGattController $ gattC: STATE_DISCONNECTED