Android蓝牙低能特征通知计数限制:这是否因设备而异



上下文

我正在构建一个针对5.0 的Android应用程序,该应用程序使用BLE连接到多个外围设备。这些外围物中的每一个都有许多(〜10)个特征。理想情况下,我想订阅这些特征中的每一个变化的通知。

然而,我从阅读中的理解是,Android的蓝牙实现对可能有效的同时通知的数量进行了严格的限制。这个问题确定了在Android蓝牙实施中定义限制的位置,还指出了限制如何随时间变化:

最大并发活动通知(BTA_GATTC_NOTIF_REG_MAX):

  • 4 Android 4.3
  • 7 Android 4.4
  • 15在Android 5.0

这些数字在此视频中得到了戴夫·史密斯(Dave Smith)的确认,其中还建议:

  • 这些限制是该设备的全球范围(即,如果某些其他应用程序订阅了2个通知,则可用的应用程序的编号将减少2);
  • );
  • 这些限制不应根据Android OS级别(即它们独立于制造商,实际硬件功能等)而有所不同)

问题

在5.0 设备上的测试中,我发现我显然能够成功地订阅比15个通知更多。到目前为止,我已经在:

上观察到了这一点
  • 像素XL运行7.1.1
  • Galaxy S6运行6.0.1
  • Nexus 5运行5.x

这些通知订阅通过两种措施成功:

  1. Gatt操作状态是GATT_SUCCESS;
  2. 该应用程序能够接收有关所有目标特征的特征变化的通知。

这是混合新闻。一方面,更多的"真实"通知==>较少的手动轮询==>更好的用户体验。另一方面,无法创建导致"真实"通知设置失败的条件,这意味着我无法轻易编写或测试一旦将此应用程序释放给真实用户,肯定需要(?)需要(?)。<<<<<<<<<<<<

问题

  • 这种极限定位行为是预期的吗?(我找不到其他地方描述的。)
  • 是否有任何可以在15个通知中最大化的设备,我可以用来测试不愉快的路径?

API的设计非常糟糕。只是此实现使用固定大小数组而不是动态数组的事实可能是库写入c。

的遗产。

内部C 库实际上返回错误时,当它无法分配通知条目时。不幸的是,该错误仅被记录,并且不会传播到消费应用程序的Java层(源)。这意味着开发人员在达到极限时无法(在代码中)确定(在代码中)。

无论如何,BTA_GATTC_NOTIF_REG_MAX限制为每个BluetoothGatt对象,因此,如果连接了另一个应用程序,则不应干扰您的通知注册。您甚至可以在连接到同一设备的同一应用中有两个BluetoothGatt对象,因此,随着许多通知注册插槽的双倍。

此处定义了最大插槽数。由于制造商可以自由更改此值,因此OS级别是唯一定义此值的东西是不正确的。例如,我知道三星在其某些设备中具有最大连接数(否则硬编码为7),因此它们也可能增加了此值。

我无法解释您如何成功订阅Google手机上的15个以上通知。您是否在单个设备或许多设备上配置了15个以上的通知?

相关内容

  • 没有找到相关文章

最新更新