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

iOS Bluetooth LE cant get notification programatically but can in other apps

我正在尝试让我的 iOS 程序与自定义蓝牙 LE 设备进行通信。我可以连接到它,读取所有服务,并读取每个服务的所有 CBCharacteristic 对象。

我正在尝试在某个 CBCharacteristic 更新时收到通知。 CBCharacteristic.properties 设置为 0x10(通知),但 CBCharacteristic.isNotifying 为假。

调用以下代码行后:

myDevice.peripheral.setNotifyValue(true, forCharacteristic: myChar)

我希望通过 CBPeripheralDelegate 函数接收通知:

func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) {}

但它永远不会被调用。

此外,使用 LightBlue Explorer app from PunchThrough.com 我可以收到通知,所以我知道这是可能的。 LightBlue 应用程序在做什么而我不是?

有人见过类似的东西吗?

供参考,设备使用WLT2564M蓝牙模块。我也可以使用

读取值
myDevice.peripheral.readValueForCharacteristic(myChar)

没有任何问题。

需要检查的几件事:

  • peripheral属性需要在使用期间持续存在
  • 您一定已经连接到它(同时没有断开连接)
  • 检查 delegate 是否设置正确
  • 检查日志
  • 确保您实施 peripheral:didUpdateNotificationStateForCharacteristic:error: 并在此处记录任何错误