scanne ich für meine Peripherie wie folgt aus:Corebluetooth zentralen Manager Rückruf didDiscoverPeripheral zweimal
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
Kein Problem gibt, finde ich die peripheren und sind in der Lage, eine Verbindung herzustellen. Wie Sie sehen können gebe ich es CBCentralManagerScanOptionAllowDuplicatesKey
mit bool NO
nicht für mehr als ein Peripheriegerät zuzulassen, aber manchmal wird der Rückruf zweimal ausgelöst.
- (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");
}
}
Einige Male ich
Discovered
Already discovered
als Ausgabe in meiner Konsole, und die meisten der Zeit nur die Discovered
Nachricht zeigt.
In meinem peripheren Delegierten entdecken I ersten Dienste, die dann [peripheral discoverCharacteristics
rufen und der Rückruf erfolgt immer:
- (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;
}
}
Wenn didDiscoverPeripheral
zweimal auftreten, service
wird nil
in diesem Verfahren, obwohl peripheral
nicht (UUID ist, Name ist immer noch korrekt).
Durch einen Neustart des Telefons oder das Zurücksetzen der Netzwerkeinstellungen wird das Problem vorübergehend behoben.
Ich muss wirklich das behoben werden! Danke
Was war der Parameter "nicht mehr als ein Gerät", den Sie angegeben haben? – yuklai
false auf CBCentralManagerScanOptionAllowDuplicatesKey – chwi
Meine Vermutung ist, dass es zweimal aufgerufen wird, wenn die Signalstärke schlecht ist. –