Я создаю приложение для пользовательского устройства Bluetooth. Приложение подключается/взаимодействует правильно с устройством, однако иногда возникают некоторые странные проблемы соединения/пересоединения.iOS Bluetooth подключен в соответствии с настройками, но у моего приложения нет подключенных периферийных устройств
Один воспроизводимого положение этого вопроса, когда батарея умирает:
- App хорошо работает с BT устройством
- умирает аккумулятор BT устройства, отключающий из приложения
- аккумулятора BT устройства заряжено, пытается восстановить к приложению
- BT Устройство подключается к ОС (настройки BT от Apple говорят, что устройство подключено)
- Приложение обнаруживает все CBC-характеристики, а характеристики 'isNotifying p roperty ложно
- приложение выполняет setNotifyValue истины от требуемых характеристик
- Задачи: Эта функция никогда не вызываются: FUNC периферийного (_ периферийная: CBPeripheral, didUpdateValueFor характеристика: CBCharacteristic, ошибка: Ошибка)
- Проблема: self.manager.retrieveConnectedPeripherals (withServices: [identifier]) не возвращает подключенных периферийных устройств, хотя настройки BT в Apple говорят, что устройство подключается.
Это, как инициируется менеджером на этапе 8:
fileprivate override init() {
super.init()
self.manager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : Constants.cbCentralManagerOptionRestoreIdentifierKey])
}
Вопрос: Кто-нибудь знает, что может быть причиной этого? Или что такое исправление?
Возможные Улики:
нужно выбрать Забудьте устройство дважды забыть устройство в BT Settings от Apple (после того, как первый раз, забывая, устройство по-прежнему связан с кнопкой информация отображается)
у меня есть фон Bluetooth включен
я получаю следующее сообщение в мой отладчик:
[CoreBluetooth] XPC connection invalid
- Я на Swift 3, Xcode 8
Как инициировать соединение в коде IOS, когда соединение потеряно? Вы должны просто называть «периферийным».connect() 'in' didDisconnect' – Paulw11
Чтобы снова подключиться, я вызываю 'self.manager.connect (периферийное, options: nil)' (где self.manager такое же, как и на шаге 8 выше), когда вызывается centralManager didDisconnectPeripheral –