#ios #bluetooth-lowenergy #bluetooth-peripheral
#iOS #bluetooth — низкое энергопотребление #bluetooth-периферийное устройство
Вопрос:
Я пытаюсь повторно подключить свое периферийное устройство после перезагрузки телефона.
Я использую обратный вызов обновления местоположения, чтобы запустить процесс подключения BLE в фоновом режиме. Стек ble правильно инициализирован в фоновом режиме (отправлено событие CBCentralManagerStatePoweredOn)
Запускается «подключение» на периферийном устройстве, но соединение не установлено…
Есть идея повторно подключить устройство после перезагрузки?
Ответ №1:
Когда вы говорите, что запускается «подключение» на периферийном устройстве, вы имеете в виду, что вы подключаетесь вручную с помощью connectPeripheral: ? В прошлом я испытывал трудности с подключением на iOS и заметил, что CoreBluetooth имеет множество внутренних условий гонки, которых вам следует избегать. Обычно я рекомендую всегда выполнять задержку отправки всех запросов на подключение не менее чем на 20 мс, что происходит после обратного вызова CoreBluetooth. Это позволит избежать большинства условий гонки. Вы можете проверить это самостоятельно, например, установив ожидающее соединение, а затем на более позднем этапе вызвать cancelPeripheralConnection: до подключения периферийного устройства. Когда вы получите обратный вызов didFailToConnect, немедленно вызовите connectPeripheral: снова. Теперь соединение должно находиться в режиме «неопределенности», когда статус соединения — «подключение», но на самом деле периферийное устройство никогда не подключится. Повторный вызов connect на этом этапе тоже ничего не даст.
Я не знаю, является ли это причиной вашей проблемы, но это может быть. Кроме того, после восстановления состояния centralManager я бы рекомендовал дать фреймворку «успокоиться» примерно на секунду, прежде чем начинать взаимодействовать с ним.
Еще одна важная вещь заключается в том, что вы не должны повторно запускать диспетчер, пока не получите applicationDidFinishLaunchingWithOptions: обратный вызов вашего AppDelegate. Выполнение этого ранее может привести к странному поведению.
Пожалуйста, проведите еще несколько расследований, и если у вас все еще возникают проблемы, дайте мне знать. У меня могут быть дополнительные советы. / Антон