我遇到了蓝牙通知的问题。我连接了2个传感器。他们每个人都有几项服务,每项服务都有一定的特色。
我订阅了其中一项服务的一个特征。我为这两个传感器做了这个。每个传感器一个接一个地连续发送长度为12和13字节的数据包。
我使用单个BluetoothManager
,一个BluetoothAdapter
,两个BluetoothGatt
变量和两个BluetoothGattCallback
,每个变量都为每个传感器定义。
我连接到第一个传感器,通知完美,非常快12-13-12-13-12-13 ...一切都很好!连接到第二个传感器后,来自第二个传感器的通知也将在12-13-12-13-12-13开始。但是来自第一个传感器的通知开始出现问题 - 我只看到13个数据包。像“传感器1包13-传感器2包12-传感器2包13-传感器1包13-传感器2包12-传感器2包13-传感器1包13”......等等。
实际上,长度为12的数据包不再存在。 iOS上的应用程序运行完美,因此在传感器上不是问题,而是在蓝牙堆栈上。
我试过https://github.com/Polidea/RxAndroidBle - 我遇到了这个问题。 然后我实现了https://developer.android.com/guide/topics/connectivity/bluetooth-le的原始解决方案 - 我遇到了同样的问题。然后我尝试了https://github.com/NordicPlayground/puck-central-android的库。
他们试图以某种方式管理线程问题(覆盖许多方法并尝试同步线程,以避免并发访问),但实际上我的问题没有解决。即使使用他们的库,我仍然遇到同样的问题(https://github.com/NordicPlayground/puck-central-android/issues/4)。
我尝试了所有类型的小黑客,在每个新通知上手动启动一个新线程,在线程上添加一个小延迟/休眠。所有这些解决方案都证明自己不是一个真正的解决方案。
我在stackoverflow和其他与此主题相关的资源上阅读了很多文章,我在这个问题上花了两周多的时间,无法找到解决方案。
是否有人遇到同样的问题,试图从不同长度的数据包中的2个设备(同时连接)获得非常快速的通知?
答案 0 :(得分:1)
我连接到三个设备并从特征中获取数据,数据每秒暴露大约20次,然后我没有遇到任何问题。我遇到了手机丢失数据包的问题,似乎问题出现在手机本身。也许你手机本身有问题。你的android版本是什么?