gpt4 book ai didi

iphone - Corebluetooth 中央管理器回调 didDiscoverPeripheral 两次

转载 作者:太空狗 更新时间:2023-10-30 03:25:58 28 4
gpt4 key购买 nike

我这样扫描我的外围设备:

NSDictionary *scanOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] 
forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
// Scan for peripherals with given UUID
[cm scanForPeripheralsWithServices:[NSArray arrayWithObject:HeliController.serviceUUID] options:scanOptions]

没问题,我找到了外围设备并能够连接到它。如您所见,我给它 CBCentralManagerScanOptionAllowDuplicatesKeybool NO 以不允许超过一个外围设备,但有时 didDiscoverPeripheral 回调会触发两次。

- (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");
}
}

有时我得到

Discovered
Already discovered

作为我的控制台的输出,大多数时候只有 Discovered 消息显示。

在我的外设委托(delegate)中,我首先发现服务,然后调用 [peripheral discoverCharacteristics 并且回调总是发生:

- (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;

}
}

didDiscoverPeripheral 出现两次时,service 在此方法中变为 nil,即使 peripheral 不是(UUID ,名称仍然正确)。

重启手机或重置网络设置可暂时解决问题。

我真的需要解决这个问题!谢谢

最佳答案

设备在广告时可能会返回额外的数据。这些可能以不同的数据包到达,在不同的时间到达。在这种情况下,didDiscoverPeripheral 在最初看到设备时首先被调用,然后在其他信息可用时再次调用。

CBCentralManagerScanOptionAllowDuplicatesKey 不同。它告诉 CoreBluetooth 您是否希望在设备再次宣传自己时接收重复的结果。它不会阻止对同一发现序列多次调用 didDiscoverPeripheral;它可以防止重复发现序列。

来源:http://lists.apple.com/archives/bluetooth-dev/2012/Apr/msg00047.html (蓝牙开发的 Apple 代表)。

关于iphone - Corebluetooth 中央管理器回调 didDiscoverPeripheral 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557500/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com