从OSX app连接到蓝牙LE设备的外围设备

时间:2015-04-16 22:47:29

标签: ios macos bluetooth bluetooth-lowenergy core-bluetooth

我正在尝试使用简单(非常类似于Hello World)OSX应用程序连接到BlueTooth LE设备的外围设备。

我正在关注Apple的Guide Lines,但是当我尝试连接到Peripheral时,我的应用程序无法按预期工作。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
NSLog(@"Discovered %@", peripheral.name);

if([peripheral.name isEqualToString:@"BLE-DEVICE"]){

    NSLog(@"Found BLE Device!");

    [_centralManager stopScan];

    NSLog(@"Scanning stopped");

    peripheral.delegate = self;

    [_centralManager connectPeripheral:peripheral options:nil];

   } 
}

问题是connectPeripheral(最后一行)不会触发委托对象的centralManager:didConnectPeripheral方法,但是如果我使用一个简单的断点来逐步调试它。

我应该添加一些其他扫描选项吗?如何检查连接是否正确执行?

1 个答案:

答案 0 :(得分:-1)

尝试等待告诉您扫描确实停止的事件。然后,连接到外围设备。也许iOS BLE堆栈没有足够的时间来停止扫描,当它尝试连接时失败,因为它还没有达到“空闲”状态。

这解释了为什么它在逐步调试时有效:在执行stopScan之后和手动执行connectPeripheral之前,LE控制器有足够的时间处理第一个命令。

虽然在正常的堆栈架构中,消息应该排队。

编辑:或者,在两次堆栈调用之间添加几毫秒的短暂延迟。