CoreBluetooth:我可以订阅具有读写权限的特性吗?

Posted

技术标签:

【中文标题】CoreBluetooth:我可以订阅具有读写权限的特性吗?【英文标题】:CoreBluetooth: Can I subscribe a characteristic that has read and write permissions? 【发布时间】:2015-01-14 02:16:39 【问题描述】:

我想使用我的 iPhone 连接到配备 蓝牙 4.0 的设备。

我记录了设备的(作为外设)属性:0x16。这意味着

CBCharacteristicPropertyRead = 0x02,
CBCharacteristicPropertyWriteWithoutResponse = 0x04,
CBCharacteristicPropertyNotify = 0x10,

(假设我已经订阅了这个特性。)如果我向这个特性写入一些数据,然后它的值会发生变化,那么就会发生通知。显然,工作流程不是我想要的。我只是写了一些数据,但我不想收到相同的数据通知回调。

所以,我认为似乎我不应该为我订阅的内容写任何东西,对吧?

希望有具体的答案。

【问题讨论】:

是 0x16 CBPeripheral 或其CBCharacteristics 之一的属性吗? 0x16 = 0x02 | 0x04 | 0x10,表示支持readwrite without responsenotify 【参考方案1】:

您必须使用CBPeripheral 中的setNotifyValue:forCharacteristic: 方法订阅通知。然后,每当特征值发生变化时,您都会通过peripheral:didUpdateValueForCharacteristic:error:委托回调收到通知。

请注意,决定何时发送通知的是外围设备:

因为选择何时发送更新的是外围设备,所以您的 应用程序应该准备好处理它们,只要通知或 指示保持启用

因此不保证您会在写信后立即收到通知。

【讨论】:

以上是关于CoreBluetooth:我可以订阅具有读写权限的特性吗?的主要内容,如果未能解决你的问题,请参考以下文章

CoreBluetooth 监控 100 个具有相同 UUID 且具有唯一输入的信标

iOS CoreBluetooth 不太可能的错误

Postgres:具有(延迟)读写访问权限的大表

尝试订阅 CBCharacteristic 时不允许写入错误

如何解决 [CoreBluetooth] 警告:对于具有多个设备连接的外围设备来说,这不是一个有效的特征

Linux 普通文件的读写执行权限说明