2017-02-22 38 views
0

Я создаю приложение для пользовательского устройства Bluetooth. Приложение подключается/взаимодействует правильно с устройством, однако иногда возникают некоторые странные проблемы соединения/пересоединения.iOS Bluetooth подключен в соответствии с настройками, но у моего приложения нет подключенных периферийных устройств

Один воспроизводимого положение этого вопроса, когда батарея умирает:

  1. App хорошо работает с BT устройством
  2. умирает аккумулятор BT устройства, отключающий из приложения
  3. аккумулятора BT устройства заряжено, пытается восстановить к приложению
  4. BT Устройство подключается к ОС (настройки BT от Apple говорят, что устройство подключено)
  5. Приложение обнаруживает все CBC-характеристики, а характеристики 'isNotifying p roperty ложно
  6. приложение выполняет setNotifyValue истины от требуемых характеристик
  7. Задачи: Эта функция никогда не вызываются: FUNC периферийного (_ периферийная: CBPeripheral, didUpdateValueFor характеристика: CBCharacteristic, ошибка: Ошибка)
  8. Проблема: 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
+0

Как инициировать соединение в коде IOS, когда соединение потеряно? Вы должны просто называть «периферийным».connect() 'in' didDisconnect' – Paulw11

+1

Чтобы снова подключиться, я вызываю 'self.manager.connect (периферийное, options: nil)' (где self.manager такое же, как и на шаге 8 выше), когда вызывается centralManager didDisconnectPeripheral –

ответ

0

Если BLE устройство разъединены, то вам необходимо вызвать эту функцию

[centralObj connectPeripheral:peripheral options:nil]; 

в didDisconnectPeripheral в делегата. Вам не нужно звонить scanForPeripheralsWithServices каждый раз.