2015-09-09 4 views
0

Я делаю приложение, которое должно разговаривать с устройствами BLE на Android.Android BLE, Не удается подключиться к устройству

У меня проблемы с установлением соединения с устройством 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, которое у нас есть, не имеет ни одной из этих проблем.

Неужели кто-нибудь столкнулся с этими проблемами? Любые идеи, как их решить?

+0

Вы тестируете логический результат BluetoothGatt.discoverServices()? –

+0

Да, я проверяю его, и у меня есть политика повторных попыток, если BTLE «занят» и не хочет принимать вызов. –

ответ

1

EDIT: Мы решили «решить» этот. На всякий случай кто-то спотыкается о такой ситуации, проблема в моем случае заключается в том, что ymmv много от устройства к устройству или даже от подключения к соединению. Иногда процесс происходит через секунду или около того, когда требуется 5, в моих тестах он может подняться до 15 на устройствах, с которыми я тестирую. Что до этого я не могу сказать.

+0

Когда вы говорите, что вы «решили» его, вы просто хотите, чтобы вы ждали дольше, и в конце концов он соединяется? Я вижу то же самое с приложением, которое имеет сотни пользователей, но не работает должным образом на HTC M8, и я жду 30 секунд и до сих пор ничего. –

+0

Не совсем. Это было давно, но логика оказалась не такой простой, как простое ожидание. Один из обходных решений, которые я использовал (видел его в трекере ошибок Google), заключался в добавлении задержки между временем установления соединения и вызовом «обнаружения сервисов», в основном, любой вызов, который я пытался без этой задержки (около секунды), нарушил подключение. Это действительно поможет, если у вас есть инструмент для изучения состояния устройства. Я также закончил «вынужденными» повторами, если обнаружил такую ​​ситуацию, в основном, подождите пару секунд, чтобы устройство повторно инициализировалось и повторило попытку. –

+0

Кроме того, вытеснять команды, выдавая их обратно назад, оказалось проблематичным. И всегда помните о последовательности. –

-1

У меня такая же проблема. Я подключаюсь к модулю bluetooth 4.0 Bluegigga BLE113. Мое приложение основано на источнике образца BluetoothLeGatt. Мой телефон Samsung отлично сочетается, без проблем. Мой LG V10 не может подключиться. За исключением случаев, когда он будет подключаться. В основном, он не будет подключаться. onConnectionStateChange никогда не вызывается. Это очень неприятно, и я не смог понять проблему.

Но я могу подключить свой телефон LG, если я использую NRF Connect, который, кажется, доказывает, что есть программное решение. Но они не освобождают источник для NRF-Connect.

Если кто-нибудь может расширить, как исправить это, я был бы признателен.

Смежные вопросы