Android BLE, не удается подключиться к устройству
Я делаю приложение, которое должно общаться с устройствами BLE на Android.
У меня проблемы с установлением соединения с устройством BLE.
Случай 1) Сканирование: во время сканирования после обнаружения устройства и сообщения о нем через
BluetoothLEScanCallback.onScanResult(...)
Я пытаюсь подключиться через:
result.getDevice().connectGatt(...)
Проблема в том, что на некоторых устройствах, которые я тестирую (например, в HTC One M8 под управлением Android 5.0.1 и HTC Desire 516 под управлением Android 4.3), процесс подключения завершается неудачно, т.е.
BluetoothGattCallback.onConnectionStateChange(....)
просто не вызывается большую часть времени. Теперь это не последовательное поведение, иногда это иногда не так.
Вторая проблема заключается в том, что часто, если соединение установлено,
BluetoothGatt.discoverServices()
вызов не выполняется, т. е. BluetoothGattCallback.onServicesDiscovered (...) также не вызывается. Я попытался повторить вызов пару раз с интервалом в X миллисекунд, но, похоже, он постоянно терпел неудачу независимо от количества попыток или расстояния между ними.
Случай 2 Прослушивание
То же самое происходит, когда я пытаюсь просто "прослушать" устройство, снова вызывая
BluetoothDevice device = BluetoothManager.getAdapter().getRemoteDevice(macAddress);
device.connectGatt(...)
результаты часто в той же ситуации.
В обоих случаях у меня чаще всего возникают проблемы с Android, у меня есть устройство Nexus 5, на котором тот же код, по-видимому, работает по большей части (иногда стек BT, похоже, не справляется со своей работой). iOS-приложение не имеет ни одной из этих проблем.
Кто-нибудь сталкивался с этими проблемами? Есть идеи как их решить?
2 ответа
РЕДАКТИРОВАТЬ: Мы "решить" этот. На всякий случай, когда кто-то сталкивается с такой ситуацией, проблема в моем случае заключается в том, что ymmv много от устройства к устройству или даже от соединения к соединению. Иногда процесс происходит за секунду или около того, иногда требуется 5, в моих тестах он может подняться до 15 на устройствах, с которыми я тестирую. Что касается того, почему это я не могу сказать.
Я сталкиваюсь с той же проблемой. Я подключаю к Bluegigga BLE113 Bluetooth 4.0 модуль. Мое приложение основано на примере источника BluetoothLeGatt. Мой телефон Samsung подключается отлично, без проблем. Мой LG V10 не может подключиться. За исключением иногда, когда он будет подключаться. Главным образом, это не будет соединяться. onConnectionStateChange никогда не вызывается. Это очень расстраивает, и я не смог понять проблему.
Но я могу подключить свой телефон LG, если использую NRF Connect, что, кажется, доказывает, что есть программное решение. Но они не выпускают источник для NRF-Connect.
Если кто-нибудь может расширить, как это исправить, я был бы признателен.