stk*_*ent 4 android bluetooth-lowenergy android-bluetooth
我正在构建一个针对5.0+的Android应用,它使用BLE连接到多个外围设备.这些外围设备中的每一个都具有许多(~10)特性.理想情况下,我想订阅这些特征中每一个特征的变化通知.
但是,我从阅读中理解的是,Android的蓝牙实施对可以激活的同时通知的数量实施了硬性限制.此问题确定了在Android蓝牙实施中定义限制的位置,并且还记录了限制随时间的变化:
最大并发活动通知(
BTA_GATTC_NOTIF_REG_MAX):
- Android 4.3上的4
- Android 4.4上的7
- Android 5.0+上的15
Dave Smith在此视频中确认了这些数字,并建议:
在5.0+设备上进行测试,但是,我发现,我似乎能够成功订阅更超过15个通知.到目前为止,我已经观察到:
这些通知订阅通过两项措施取得成功:
GATT_SUCCESS;这是好消息.一方面,更多"真实"通知==>减少手动轮询==>更好的用户体验.另一方面,无法创建导致"真实"通知设置失败的条件意味着我无法轻松编写或测试手动回退代码,一旦将此应用程序发布给真实用户,肯定会(?)需要这些代码.
API的设计非常糟糕.事实上,这个实现使用固定大小的数组而不是动态数组,这可能是用C语言编写库时的遗留问题.
当内部C++库无法分配通知条目时,实际上会返回错误.遗憾的是,该错误仅被记录,并且不会传播到使用应用程序(源)的Java层.这意味着开发人员无法确定(在代码中)何时达到限制.
无论如何,BTA_GATTC_NOTIF_REG_MAX限制是每个BluetoothGatt对象,因此如果连接了另一个应用程序,它不应该干扰您的通知注册.您甚至可以BluetoothGatt在同一个应用程序中连接到同一设备的两个对象,这样可以获得两倍的通知注册槽.
此处定义了最大插槽数.由于制造商可以自由地更改此值,因此操作系统级别是定义此值的唯一方法是不正确的.例如,我知道三星在他们的一些设备中增加了最大连接数(否则硬编码为7),因此他们也可能增加了这个值.
我无法解释您是如何成功订阅Google手机上超过15个通知的.您是在一台设备上还是在多台设备上配置了超过15个通知?
| 归档时间: |
|
| 查看次数: |
2059 次 |
| 最近记录: |