iOS8 y BTLE | CBCentralManager no puede encontrar periféricos
core-bluetooth (2)
En IOS 7, podría escaparse iniciando un escaneo BLE incluso antes de que CBCentralManager estuviera listo. IOS 7 solía escupir una advertencia en tales casos -
CoreBluetooth [API MISUSE] solo puede aceptar comandos mientras está encendido
Con IOS8, la advertencia ya no aparece y el escaneo no se inicia. Para solucionar el problema, espere a que se encienda el CBCentral, es decir, espere a que el administrador de CBCentral llegue al estado "CBCentralManagerStatePoweredOn" y luego inicie el escaneo. Funciona bien con ese cambio :)
Tengo una aplicación de iOS que se conecta a un dispositivo (arduino) usando un BTLE. Todo funciona bien en mi iPad iOS 7. Después de actualizar a iOS 8, CBCentralManager no encuentra periféricos.
- (void)startScanningForSupportedUUIDs
{
[self.centralManager scanForPeripheralsWithServices:nil options:nil];
}
No sé cuál puede ser el problema.
Tengo la solución, por alguna razón, en iOS 8 hay un poco de retraso después de instanciar tu CBManager. Debe comenzar a explorar cuando CBCentralManager está activado, en este método:
-(void)centralManagerDidUpdateState:(CBCentralManager *)central{
switch (central.state) {
case CBCentralManagerStatePoweredOff:
NSLog(@"CoreBluetooth BLE hardware is powered off");
break;
case CBCentralManagerStatePoweredOn:
{
NSLog(@"CoreBluetooth BLE hardware is powered on and ready");
NSArray *uuidArray = [NSArray arrayWithObjects:[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID], nil];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
[centralManager scanForPeripheralsWithServices:uuidArray options:options];
}
break;
case CBCentralManagerStateResetting:
NSLog(@"CoreBluetooth BLE hardware is resetting");
break;
case CBCentralManagerStateUnauthorized:
NSLog(@"CoreBluetooth BLE state is unauthorized");
break;
case CBCentralManagerStateUnknown:
NSLog(@"CoreBluetooth BLE state is unknown");
break;
case CBCentralManagerStateUnsupported:
NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform");
break;
default:
break;
}