【问题标题】:Connect to Peripheral of Bluetooth LE device from OSX app从 OSX 应用程序连接到蓝牙 LE 设备的外围设备
【发布时间】:2015-06-23 14:24:40
【问题描述】:

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

我正在遵循 Apple 的 Guide Lines ,但是当我尝试连接到外围设备时,我的应用程序无法按预期工作。

- (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 方法,但是如果我使用简单的断点运行逐步调试,它会触发。

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

【问题讨论】:

  • 您需要确保保留 CBPeripheral 的本地副本。
  • 保留 CBPeripheral 的本地副本使我的应用程序运行良好。我不明白为什么,但它有效!谢谢。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 2016-04-11
    • 2018-11-16
    • 2015-06-08
    • 2013-12-13
    • 2013-10-13
    • 1970-01-01
    • 2016-01-19
    • 2016-12-02
    相关资源
    最近更新 更多