skanować dla mojego peryferyjnych tak:Corebluetooth centralny menedżer zwrotna didDiscoverPeripheral dwukrotnie
NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]
Nie ma problemu, uważam, że obwodowy i są w stanie połączyć się z nim. Jak widać, podaję CBCentralManagerScanOptionAllowDuplicatesKey
z bool NO
, aby nie zezwalać na więcej niż jedno urządzenie peryferyjne, ale czasami wywołanie zwrotne didDiscoverPeripheral
jest uruchamiane dwukrotnie.
- (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");
}
}
Czasami dostaję
Discovered
Already discovered
jako wyjście w mojej konsoli, a większość czasu tylko komunikat Discovered
pokazuje.
W moim delegata obwodowej po raz pierwszy odkryć usług, które następnie wywołać [peripheral discoverCharacteristics
i zwrotna zawsze następuje:
- (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;
}
}
Kiedy didDiscoverPeripheral
wystąpić dwukrotnie service
staje nil
w tej metodzie, chociaż peripheral
nie jest (UUID, nazwa jest nadal poprawna).
Ponowne uruchomienie telefonu lub zresetowanie ustawień sieciowych powoduje tymczasowe rozwiązanie problemu.
Naprawdę muszę to naprawić! Dziękujemy
Jaki był parametr "nie więcej niż jedno urządzenie", który podałeś? – yuklai
false w CBCentralManagerScanOptionAllowDuplicatesKey – chwi
Domyślam się, że jest on wywoływany dwa razy, gdy siła sygnału jest słaba. –