Corebluetooth central manager callback didDescubrirPeripheral dos veces
Escaneo para mi periférico de esta manera:
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
No hay problema allí, encuentro el periférico y puedo conectarme a él. Como puedes ver lo doyCBCentralManagerScanOptionAllowDuplicatesKey
conbool NO
no permitir más de un periférico, pero a veces eldidDiscoverPeripheral
la devolución de llamada se activa dos veces.
- (void) centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
advertisementData:(NSDictionary *)advertisementData
RSSI:(NSNumber *)RSSI
{
if(!discovered){
discovered = YES;
NSLog(@"Discovered");
[cm stopScan];
[scanButton setTitle:@"Connect" forState:UIControlStateNormal];
}
else if(discovered){
discovered = YES
NSLog(@"Already discovered");
}
}
Algunas veces me dan
Discovered
Already discovered
como salida en mi consola, y la mayoría de las veces solo elDiscovered
mensaje se muestra.
En mi delegado periférico descubro primero los servicios, que luego llamo[peripheral discoverCharacteristics
y la devolución de llamada siempre se produce:
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{
NSLog(@"Did discover characteristic for service %@", [service.peripheral UUID]);
for(CBCharacteristic *c in [service characteristics]){
// We never get here when peripheral is discovered twice
if([[c UUID] isEqual:myCharacteristicUUID]){
NSLog(@"Found characteristic");
self.throttleCharacteristic = c;
}
}
CuandodidDiscoverPeripheral
ocurrir dos veces,service
se convierte ennil
en este método, aunqueperipheral
no es (UUID, el nombre sigue siendo correcto).
Al reiniciar el teléfono o restablecer la configuración de red se soluciona el problema temporalmente.
¡Realmente necesito arreglar esto! Gracias