如何在 iOS 应用程序中从蓝牙 LE 设备获取通知

Posted

技术标签:

【中文标题】如何在 iOS 应用程序中从蓝牙 LE 设备获取通知【英文标题】:How to get notification from Bluetooth LE devices in iOS app 【发布时间】:2012-08-08 05:21:50 【问题描述】:

我正在开发一个 ios 蓝牙 LE 应用程序。我能够正确且成功地遵循的功能如下:

    发现外围设备。 正在连接外围设备。 获取服务和特征。 能够在点击读取按钮时从特征中读取数据。 能够写入数据。

这里我遇到了一个问题,只有当 BLE 设备将传入的数据传输到应用程序时,我才需要读取它。我正在明确阅读按钮点击的特征。我的 BLE 设备在特定的时间间隔内连续传输一些数据,但我无法获取。

我在特性上也设置了 setNotify,但也没有成功。

[peripheral setNotifyValue:YES forCharacteristic:characteristic];

BLE 设备事件如何通知我的应用(由它发送到应用)? 请在这里帮助我或给我一些建议。

提前致谢。

【问题讨论】:

谁能帮我解决这个问题? 你怎么知道芯片正在发送通知数据? 【参考方案1】:

你正在做的应该工作。从 Peripheral 到达的所有数据都将到达 didUpdateValueForCharacteristic 回调方法。在那里寻找它。

因此,无论您是显式调用readCharacteristic 方法,还是只是设置外围设备以在有可用数据时通知您(如警报或心跳),您仍然会在同一个地方收到数据。

注意:当您发送setNotifyValue 消息时,您应该会在didUpdateNotificationStateForCharacteristic 方法上收到一个没有错误的回调。如果没有,我建议您查看您的外设固件并确保该特性不是只读/可写的。

【讨论】:

您好,我们能否知道某个特征的权限,例如通知是否启用?【参考方案2】:

在外围端,需要设置特性的属性来启用通知。您可以使用 CBCharacteristicPropertyNotify 属性执行此操作。例如,以下是创建特征的方式:

CBMutableCharacteristic *alertLevelCharacteristic = 
[[CBMutableCharacteristic alloc] initWithType:alertLevelCharacteristicUUID
                                   properties:CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify
                                        value: nil permissions:CBAttributePermissionsReadable];

【讨论】:

以上是关于如何在 iOS 应用程序中从蓝牙 LE 设备获取通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS 蓝牙 LE 无法以编程方式获取通知,但可以在其他应用程序中

如何从蓝牙 LE 设备获取数据

IOS 蓝牙 LE 扫描设备未添加到 uitableview

如何在 Swift 中从蓝牙特性中获取数据

IOS:如何检测配对蓝牙 3.0 设备的品牌/型号?

蓝牙 LE iOS 无法在后台扫描