Никогда не видел ничего в CoreBluetooth Framework о поддержании соединения в фоновом режиме
Я использую Xcode 5 и CoreBluetooth Framework.
В файле plist
Требуемые фоновые режимы -> приложение общается с помощью CoreBluetooth
В Xcode 5 есть раздел дляФоновые режимы в возможностях вашего приложения. Установить фоновые режимы наНА и проверить"Использует аксессуары Bluetooth LE"
Наше приложение и соединение BLE работает нормально, пока приложение работает.
Проблема в том, что когда телефон переходит в спящий режим или если задняя часть переходит в фоновый режим, соединение BLE перестает работать.
Я не видел ничего в CoreBluetooth Framework о том, чтобы поддерживать соединение в фоновом режиме.
Когда приложение получит фон, чем вызовет методstartBackgroundNotification, как ниже метод
-(void)startBackgroundNotification{
self.counterTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:counterTask];
}];
BackgroundManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
nDevices = [[NSMutableArray alloc]init];
sensorTags = [[NSMutableArray alloc]init];
}
После вызова startBackgroundNotification, чем будет вызывать (делегировать)centralManagerDidUpdateState
-(void)centralManagerDidUpdateState:(CBCentralManager *)central {
if (central.state != CBCentralManagerStatePoweredOn) {
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"BLE not supported !"
message:[NSString stringWithFormat:@"CoreBluetooth return state: %d",central.state]
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
}
else
[central scanForPeripheralsWithServices:nil options:nil];
}
Но никогда не вызывайте функцию ниже
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
}
Когда приложение находится в фоновом режиме, и мы нажимаем кнопку на устройстве BLE, телефон выдает уведомление о том, что устройству необходим доступ к приложению, поэтому я должен снова открыть приложение вручную.