Nunca vi nada no CoreBluetooth Framework sobre manter a conexão ativa em segundo plano
Estou usando o Xcode 5 e o CoreBluetooth Framework.
No arquivo plist
Modos de fundo necessários -> O aplicativo se comunica usando o CoreBluetooth
No Xcode 5, há uma seção paraModos de fundo nos recursos do seu aplicativo. Defina os modos de segundo plano comoEM e verifique"Utiliza acessórios Bluetooth LE"
Nosso aplicativo e a conexão BLE funcionam bem enquanto o aplicativo está em execução.
O problema é quando o telefone entra no modo de suspensão ou se a parte traseira voltar ao fundo, a conexão BLE para de funcionar.
Não vi nada no Framework CoreBluetooth sobre manter a conexão ativa em segundo plano.
Quando o aplicativo obtém um plano de fundo, o método será chamado parastartBackgroundNotification. como abaixo do método
-(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];
}
Após a chamada startBackgroundNotification, a chamada será (delegada) paracentralManagerDidUpdateState
-(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];
}
Mas nunca chame a função abaixo
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{
}
Quando o aplicativo está em segundo plano e pressionamos um botão no dispositivo BLE, o telefone emite uma notificação informando que o dispositivo precisa de acesso ao aplicativo, então eu tenho que abrir o aplicativo manualmente novamente.