Подключиться к периферийному устройству Bluetooth после перезагрузки
Я пытаюсь повторно подключить периферийные устройства после перезагрузки телефона.
Я использую обратный вызов обновления местоположения, чтобы запустить процесс подключения BLE в фоновом режиме. Стек ble правильно инициализируется в фоновом режиме (отправлено событие CBCentralManagerStatePoweredOn)
"Соединение" на периферии запущено, но соединение не установлено...
Любая идея, чтобы восстановить устройство после перезагрузки?
1 ответ
Когда вы говорите, что "подключение" на периферии запущено, вы имеете в виду, что вы подключаетесь вручную с помощью connectPeripheral:? В прошлом я боролся с подключением на iOS и заметил, что у CoreBluetooth есть много внутренних условий, которых вы должны избегать. Обычно я рекомендую всегда выполнять задержку отправки для всех запросов на подключение не менее 20 мс, которая происходит после обратного вызова CoreBluetooth. Это позволит избежать большинства условий гонки. Вы можете проверить это самостоятельно, например, установив ожидающее соединение, а затем на более позднем этапе вызывая cancelPeripheralConnection: до подключения периферийного устройства. Когда вы получите обратный вызов didFailToConnect, немедленно вызовите connectPeripheral: снова. Теперь соединение должно быть в "неопределенном" режиме, когда состояние соединения "соединяется", но на самом деле периферийное устройство никогда не подключится. Повторный вызов connect ничего не изменит на этом этапе.
Я не знаю, является ли это причиной вашей проблемы, но это может быть. Кроме того, после восстановления состояния CentralManager я бы рекомендовал дать фреймворку "установиться" примерно на секунду, прежде чем начинать взаимодействовать с ним.
Еще одна важная вещь заключается в том, что вы не можете повторно запускать менеджер до тех пор, пока не получите applicationDidFinishLaunchingWithOptions: обратный вызов вашего AppDelegate. Делать это раньше может вызвать странное поведение.
Пожалуйста, проведите еще несколько расследований, и если у вас все еще есть проблемы, дайте мне знать. У меня могут быть дополнительные советы. / Антон