如何在 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 无法以编程方式获取通知,但可以在其他应用程序中