Приложение не обнаруживает службы при повторном подключении после выключения питания Bluetooth

Когда я переключаю bluetooth при подключении к периферийному устройству CoreBluetooth, я отключаю и удаляю все ссылки на мое периферийное устройство в обратном вызове centralManagerDidUpdateState.

При повторном сканировании будет найдено и повторно подключено к устройству, а также снова выдан discoverServices, но на этот раз обратный вызов didDiscoverServices никогда не происходит. Удалив все настройки (Основные -> Сброс -> Сбросить все настройки) или сделав перезагрузку все снова работает. Отключение/повторное подключение в обычном режиме также работает. Как я могу обойти это или программно удалить весь кеш и UUID, хранящиеся в iOS?


person chwi    schedule 31.07.2013    source источник


Ответы (2)


Когда вы получите ответ о том, что состояние CentralManager изменилось на CBCentralManagerStatePoweredOff, вам нужно перебрать все ваши периферийные устройства и вызвать на них cancelConnection:. Тогда вам будет хорошо идти.

[_yourCentralManager cancelPeripheralConnection:yourPeripheral];
person Tommy Devoy    schedule 06.08.2013
comment
К сожалению, это не сработало. Он по-прежнему не получает обратный вызов didDiscoverServices - person chwi; 07.08.2013
comment
Фактически, вы получаете это, пытаясь отменить периферийное соединение на .poweredOff: [CoreBluetooth] API НЕПРАВИЛЬНОЕ ИСПОЛЬЗОВАНИЕ: ‹CBCentralManager: 0x1c447db00› может принимать эту команду только во включенном состоянии - person leftspin; 21.12.2017

Если центральное состояние CBManagerStatePoweredOn, вызовите cancelPeripheralConnection API следующим образом:

[self.centralManager cancelPeripheralConnection:self.peripheral];

будет вызван метод обратного вызова centralManager:didDisconnectPeripheral:error:. Но если состояние не CBManagerStatePoweredOn, например CBManagerStatePoweredOff, этот обратный вызов не будет выполняться.

person 陈健 Mark    schedule 16.05.2019