Как я могу повторно подключиться к устройству после отключения в Core Bluetooth

В Core Bluetooth после подключения к устройству я выключаю устройство, и оно отключается. Но когда я снова включаю устройство, didDiscoverPeripheral снова не вызывается. Как снова подключиться к устройству?


person tagtraum    schedule 08.11.2012    source источник
comment
как вы отключаете устройство от периферии?   -  person User_1191    schedule 28.02.2019


Ответы (4)


Когда вы отключаете устройство с помощью cancelPeripheralConnection, будет вызван метод делегата didDisconnectPeripheral. Однако с iOS 6.0 устройство остается подключенным примерно 40-50 секунд (или больше), поэтому в этот период времени didDiscoverPeripheral вызываться не будет. Если вы хотите «открыть» его снова, просто вызовите метод retrieveConnectedPeripherals, и вы получите ссылку в didRetrieveConnectedPeripherals.

Однако лучшим решением будет сохранить UUID устройства и использовать его для повторного подключения с помощью метода retrievePeripherals. Это вызовет didRetrievePeripherals, и вы сможете повторно подключиться к connectPeripheral. Это самый быстрый способ переподключения к устройству, в этом случае сканирование не требуется.

person Andras    schedule 16.11.2012
comment
Я ищу то же самое с EAAccessory Framework. Является ли это возможным? Если да, то может ли кто-нибудь указать мне, как это сделать? Заранее спасибо...:) - person Xavier Geoffrey; 22.11.2013

Когда вы выполняете сканирование с помощью scanForPeripheralsWithServices, оно обычно уведомляет вас только один раз для определенного адреса устройства. Вы можете изменить это, чтобы сообщать о дубликатах, указав опцию CBCentralManagerScanOptionAllowDuplicatesKey. Или вы можете сделать так, чтобы ваше приложение обнаружило, что другое устройство отключилось по тайм-ауту, и перезапустило сканирование.

person TJD    schedule 08.11.2012

В CoreBluetooth все управление осуществляется на прикладном уровне. В вашем случае, что бы я сделал, это прослушать событие отключения, чем в том же событии повторно подключить периферийное устройство. Этот метод подключения является недорогим и гарантирует вам повторное подключение к вашему устройству, когда оно вернется в зону действия.

Обратите внимание, что если вы явно отключите устройство, вы получите то же самое событие отключения, но вам не нужно вызывать метод повторного подключения.

person Giordano Scalzo    schedule 14.01.2013

@Andras дал мне правильный путь, но его ответ больше не является полным, начиная с iOS7.

Лучший способ повторно подключиться к предыдущему устройству — использовать метод retrievePeripherals(withIdentifiers:).

Этот метод не вызывает делегата, а напрямую возвращает вам список Peripheral, соответствующий списку UUID, переданному в параметрах.

if let peripheral = self.centralManager.retrievePeripherals(withIdentifiers: [uuid]).first {
    self.peripheral = peripheral // <-- super important
    self.centralManager.connect(peripheral, options: nil)
}

Пожалуйста, проверьте «очень важную» строку приведенного выше кода: метод connect(_:option:) не сохраняет периферийное устройство, и если вы не сделаете это самостоятельно, соединение всегда будет прерываться без какого-либо обратного вызова, поскольку периферийный объект будет уничтожен.

person Martin    schedule 25.03.2019