ios - 从 OSX 应用程序连接到蓝牙 LE 设备的外围设备

标签 ios macos bluetooth bluetooth-lowenergy core-bluetooth

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

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

- (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(最后一行)不会触发委托(delegate)对象的 centralManager:didConnectPeripheral 方法,但是如果我使用它确实有简单的断点。

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

最佳答案

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

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

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

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

关于ios - 从 OSX 应用程序连接到蓝牙 LE 设备的外围设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687269/

相关文章:

ios - 线程 1 : Fatal error: Index out of range when index is less then array count

ios - 如何在 swift 中使用贝塞尔路径创建不同大小的饼图?

IOS - UIPageControl 在状态栏下方创建空间

android - 无法从 RS232 蓝牙模块读取 InputStream

objective-c - 有什么方法可以在Objective-C中获取属性的类型?

iphone - 为什么从 NSObject 继承的对象的大小是 16bytes

macos - 与 Finder 集成的 Git 客户端

objective-c - 从 PID 填充 ProcessSerialNumber 的另一种方法,因为 GetProcessForPID 已弃用

Android 蓝牙 StartDiscovery() 总是返回 false

android - 是否可以通过 OBEX 在未配对的设备之间传输文件?