Я работаю над проектом BLE, все работает отлично, когда приложение находится на переднем плане. Он может обнаруживать и подключаться к периферии, все методы обратного вызова работают отлично.iOS: didDiscoverPeripheral не вызывается в фоновом режиме
Но проблема в том, что приложение в фоновом режиме (я нажимаю кнопку «домой»). Вызывается только метод делегата centralManagerDidUpdateState
.
- (void)centralManagerDidUpdateState:(CBCentralManager *)central{
switch (central.state) {
case CBCentralManagerStatePoweredOn:
[self.cbCentralManager scanForPeripheralsWithServices:nil options:@{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES }];
break;
default:
break;
}
}
Я использую scanForPeripheralsWithServices:nil
вариант, но если приложение в фоновом режиме, didDiscoverPeripheral
обратный звонок никогда не звонил. Я редактировал свой файл plist с опцией «bluetooth-central», чтобы поддерживать центральную роль в фоновом режиме.
Любая идея, почему didDiscoverPeripheral
метод не звонит, когда приложение в фоновом режиме?
'didConnwctPeripheral' будет вызван в ответ на' connect', а не 'scanForPeripheralsWithServices'. Получаете ли вы вызов 'didDiscoverPeripheral'? Обратите внимание, что опция дубликатов игнорируется в фоновом режиме, и вы получите только одно событие обнаружения для каждого периферийного устройства. – Paulw11
Да, проблема в том, что 'didDiscoverPeripheral' не называется фактически, я отредактировал мой вопрос. Если приложение на переднем плане уже начнет сканирование периферийных устройств, когда приложение в фоновом режиме вызывает вызов «scanForPeripheralsWithServices», вызываемый для того же периферийного устройства? IOS игнорирует дубликаты, когда обнаруживает периферию на переднем плане? – ding
Правильно, если уведомление об обнаружении для данного периферийного устройства уже доставлено на переднем плане или в фоновом режиме, вы не получите никаких дополнительных уведомлений об обнаружении для этого периферийного устройства в фоновом режиме. – Paulw11