la scansione per la mia periferica come questa:Corebluetooth centrale responsabile di richiamata due volte didDiscoverPeripheral
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
Nessun problema, trovo la periferica e sono in grado di connettersi ad esso. Come potete vedere, gli do CBCentralManagerScanOptionAllowDuplicatesKey
con bool NO
per non consentire più di una periferica, ma a volte il callback didDiscoverPeripheral
si attiva due volte.
- (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");
}
}
Alcune volte ottengo
Discovered
Already discovered
come output nella mia console, e il più delle volte solo il messaggio Discovered
vede.
Nel mio delegato periferico ho scoprire servizi, che poi chiamano [peripheral discoverCharacteristics
e il callback si verifica sempre:
- (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;
}
}
Quando didDiscoverPeripheral
si verificano due volte, service
diventa nil
in questo metodo, anche se peripheral
non è (UUID, il nome è ancora corretto).
Il riavvio del telefono o il ripristino delle impostazioni di rete risolvono il problema temporaneamente.
Ho davvero bisogno di farlo riparare! Grazie
Qual è stato il parametro "non più di un dispositivo" che hai fornito? – yuklai
false su CBCentralManagerScanOptionAllowDuplicatesKey – chwi
La mia ipotesi è che venga chiamata due volte quando la potenza del segnale è scarsa. –