Как я могу подключиться к устройству после отключения в Core Bluetooth
В Core Bluetooth после подключения к устройству я выключаю устройство, и устройство отключается. Но когда я снова включаю устройство, нет didDiscoverPeripheral
позвонил снова. Как я могу снова подключиться к устройству?
3 ответа
Когда вы отключаете устройство с cancelPeripheralConnection
didDisconnectPeripheral
Метод делегата будет вызван. Однако из iOS 6.0 устройство остается подключенным в течение 40-50 секунд (или более), поэтому нет didDiscoverPeripheral
будет вызван в этот срок. Если вы хотите "открыть" это снова, просто позвоните retrieveConnectedPeripherals
метод, и вы получите ссылку в didRetrieveConnectedPeripherals
,
Однако лучшее решение - сохранить UUID устройства и использовать его для повторного подключения к retrievePeripherals
метод. Это вызовет didRetrievePeripherals
и вы можете восстановить связь с connectPeripheral
, Это самый быстрый способ восстановить соединение с устройством, в этом случае сканирование не требуется.
Когда вы делаете сканирование с scanForPeripheralsWithServices
Обычно он уведомляет вас только один раз об определенном адресе устройства. Вы можете изменить это, чтобы сообщить о дубликатах, указав опцию CBCentralManagerScanOptionAllowDuplicatesKey
, Либо приложение может обнаружить, что другое устройство отключено с помощью тайм-аута, и перезапустить сканирование.
@Andras указал мне правильный путь, но его ответ больше не является полным, начиная с iOS7.
Лучший способ повторно подключиться к предыдущему устройству - использовать retrievePeripherals(withIdentifiers:)
метод.
Этот метод не вызывает делегата, а напрямую возвращает вам список Peripheral
s, соответствующий списку UUID
переданы в параметрах.
if let peripheral = self.centralManager.retrievePeripherals(withIdentifiers: [uuid]).first {
self.peripheral = peripheral // <-- super important
self.centralManager.connect(peripheral, options: nil)
}
Пожалуйста, проверьте "очень важную" строку в приведенном выше коде: Метод connect(_:option:)
не сохраняет периферийное устройство, и если вы этого не сделаете, соединение всегда будет прервано без какого-либо обратного вызова, поскольку периферийный объект будет уничтожен.
В CoreBluetooth все управление осуществляется прикладным уровнем. В вашем случае я хотел бы прослушать событие отключения, а затем подключить периферийное устройство. Метод подключения является недорогим и гарантирует вам восстановить соединение с вашим устройством, когда оно вернется в зону действия.
Обратите внимание, что если вы явно отключили устройство, вы получили то же самое событие отключения, но вам не нужно вызывать метод повторного подключения.