蓝牙数据更新通知未被触发

Bluetooth data update notifications not getting fired

我在从蓝牙外围设备读取数据时遇到了一些问题。我们有一个具有以下 gatt 详细信息的蓝牙设备。

<service uuid="service id" advertise="true">
    <description>XXXX service</description>
    <characteristic uuid="characteristic id" id="xgatt_data">
        <description>Data</description>
        <properties write="true" indicate="true" />
        <value variable_length="true" length="20" type="user" />
    </characteristic>
</service>

我在做的是

我可以连接到设备。我也可以向外围设备发送命令(数据)。一旦我们向设备发送任何命令,它就会发送一些数据作为响应。我可以在设备上看到日志,一旦收到任何命令,它就会发回一些数据。但是在我的 iOS 设备中,我无法使用通知或正常读取功能来读取数据。我在这里缺少什么?

通知和指示是两个不同的东西:如果您启用指示,您将不会收到通知,如果您启用指示,则发送指示的应用程序期望对每个发送的指示(来自应用层)作出响应。

您的权限似乎也不太正确:xgatt_data 特性不一定需要 "Write" 权限,除非您打算让客户更改它的 value.如果你想从通知中读取数据,它需要 "Read" 权限,而不是简单地被通知它已收到。

要启用通知,xgatt_data 特性中需要 客户端特性配置描述符 (UUID 00002901-..)。此 CCCD 需要 "Read+Write" 权限才能启用 notifications/indications(有些工作没有读取权限,有些则没有)。

最后确保您的设备永远不会同意小于通知大小的属性 MTU,如果它不适合单个包,外围设备将不会接收它。如果使用数据长度扩展,请在协商 DLE 之前不要启用通知,或者将通知值大小保持在设备的原始最小值以下 属性 MTU.

我发现了问题。实际上问题出在模拟器上。现在我可以获得数据更新指示并能够仅使用 "read" 和 "indicate" 属性将数据写入 BLE。