Я работаю над приложением, в котором я хочу подключиться к нескольким устройствам BLE.У меня есть 2 типа устройств BLE, к которым мне нужно подключиться (одно с использованием платы TI и одно с использованием платы Nordic).
Проблема 1
Моя проблема возникает при подключении к плате Nordic во времяиспользуя S5.По существу, каждый раз, когда я подключаю другое устройство после подключения скандинавского устройства, оно отключается, и в журнале показывается:
onClientConnectionState () status = 22 * 1008 *
Из того, что я прочитал этоозначает, что ОС Android отключена от устройства, и я мало что могу сделать
Я могу подключиться к столько плат TI, сколько захочу (проверено 6), и могу подключить плату Nordic после, но как толькокогда я подключаю любое другое устройство, северная плата отключается.
Когда подключена северная плата, и я пытаюсь подключить другую северную плату, оба отключаются.
Выпуск 2
КогдаЯ подключаюсь к плате Nordic, она остается подключенной (даже с другими ранее подключенными устройствами), но через определенное время отключается, и в журнале отображается:
onClientConnectionState () status = 19
Из того, что я прочитал, это означает, что соединение с устройством BLE прекращеноИнтервал между подключением и отключением:
11:00:09.850 D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=7 device=F9:A2:E9:86:EC:82
11:01:09.730 D/BluetoothGatt: onClientConnectionState() - status=19 clientIf=7 device=F9:A2:E9:86:EC:82
11:04:20.270 D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=F9:A2:E9:86:EC:82
11:05:19.740 D/BluetoothGatt: onClientConnectionState() - status=19 clientIf=6 device=F9:A2:E9:86:EC:82
Вещи, которые я пробовал
Итак, моей первой идеей было выяснить, является ли это только моим приложением или, возможно, проблемой с устройством BLE.Я использую приложение nRF и подключен к плате Nordic, а затем подключен к нескольким другим устройствам.Это было нормально, я смотрел журнал и не отключался, и я мог слушать все характеристики с каждого устройства.
Так что я пришел к выводу, что я делаю что-то не так в своем приложении, так как это возможноподключите к нескольким устройствам после северной платы.Поэтому я начал анализировать, что я делаю в своем приложении.
По-разному ли я отношусь к двум типам устройств?Устройства имеют разные рекламируемые сервисы, и я фильтрую их.Единственное, что я делаю по-разному на разных устройствах - это в зависимости от найденной службы, я маркирую их по типу устройства.Но это все, я проанализировал это несколько раз, чтобы убедиться, что ничего, что могло бы иметь значение, не обрабатывается по-другому.
После попытки выяснить, что вызывает это некоторое время, я решил попробовать на другом устройстве (более низкая спецификацияAndroid GO phone и Doogee x20 Android 7) и мое приложение работало совершенно нормально.Подключается к 2 платам Nordic, затем к нескольким платам TI, и они не отключаются.Многократное тестирование работает последовательно, как и должно быть, без проблем.
Иногда на S5 случается одна странность, я заставляю его работать, просто пытаясь соединиться, но это происходило только 2 раза, и я этого не делаля думаю подождать и посмотреть, отключатся ли северные платы через минуту, так как я еще не осознал этого 1-минутного выпуска.
Я только что проверил на другом S5, и он сработал с моей первой попытки, но не смогс тех пор.
Таким образом, рецепт для этого, кажется, выглядит так:
- Samsung S5 (связано ли это с Android 5.0 или с конкретным устройством, я не уверен)
- Скандинавские доски, но не TI
- Мое приложение, но не nRF
Изменение любого из вышеперечисленных, и нет проблем
Редактировать: Яиспользуя это для подключения:
deviceEntry.gatt = device.connectGatt(this, false, GattCallback(this, deviceEntry))
deviceEntry - это просто класс, который я создал, чтобы удерживать BluetoothGatt и состояние вместе