Android上蓝牙低能设备问题的多个通知

Android上蓝牙低能设备问题的多个通知,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我遇到了蓝牙通知问题。我连接了两个传感器。它们每个都有几个服务,每个服务都有一定的特点 我订阅其中一项服务的一个特征。我对两个传感器都这样做。每个传感器连续发送长度为12和13字节的数据包 我使用一个BluetoothManager、一个BluetoothAdapter、两个BluetoothGatt变量和两个BluetoothGattCallback,每个都是为每个ble传感器定义的 我连接到第一个传感器,通知非常完美,非常快12-13-12-13-12-13。。。一切都好!在我连接到第二个传

我遇到了蓝牙通知问题。我连接了两个传感器。它们每个都有几个服务,每个服务都有一定的特点

我订阅其中一项服务的一个特征。我对两个传感器都这样做。每个传感器连续发送长度为12和13字节的数据包

我使用一个
BluetoothManager
、一个
BluetoothAdapter
、两个
BluetoothGatt
变量和两个
BluetoothGattCallback
,每个都是为每个ble传感器定义的

我连接到第一个传感器,通知非常完美,非常快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上的应用程序工作正常,因此传感器上没有问题,但蓝牙协议栈上有问题

我试过-我有这个问题。 然后,我实现了来自的原始解决方案-我有同样的问题。然后我试着去图书馆

他们试图以某种方式管理线程问题(覆盖许多方法并尝试同步线程,以避免并发访问),但本质上我的问题没有得到解决。即使使用他们的库,我仍然会遇到同样的问题()

我尝试了各种各样的小技巧,在每个新通知上手动启动一个新线程,在线程上添加一个小延迟/睡眠。所有这些解决方案都证明自己不是真正的解决方案

我读了很多关于stackoverflow的文章和其他与此相关的资料,我花了两个多星期的时间在这个问题上,无法找到解决方案


是否有人遇到过同样的问题,试图以不同长度的数据包从2台ble设备(同时连接)获取非常快速的通知?

我连接到3台设备并从特征中获取数据,数据每秒暴露大约20次,然后我没有遇到任何问题。我遇到了手机丢失数据包的问题,似乎问题出在手机本身。也许你的手机本身有问题。您的android版本是什么?

您可能需要添加有关硬件和软件版本的详细信息。Android上的BLE堆栈听起来确实有问题,但是你使用的是什么版本的Android?你能发布你的onCharacteristicChanged的代码吗?您需要直接在回调中提取值,而不是在某个计划的处理程序中提取值。@Tim Tisdall,我确实在3台设备上进行了测试,结果证明,仅在一台设备上(三星SM-J330F Android 7.0,API 24)就存在问题。但在某些设备上不工作是不行的。。。这台设备有BLE,从2017年开始,非常好。我在联想S1La40(安卓5.1,API 22)和三星SM-G935F(安卓8.0.0,API 26)上进行了测试,两款手机都能正常工作。你是否有更多关于为什么它在某些设备上工作而在其他设备上不工作的细节?是的,这听起来很奇怪。也许你可以先看看HCI snoop日志,看看通知是否包含正确的数据?@Emil-你会很快发现BLE可能会有很多麻烦,因为并非所有硬件(或软件堆栈)都能在所有情况下正常工作。大多数在普通情况下都能正常工作,但在边缘情况下(例如尝试连接太多设备)会以奇怪而奇妙的方式失败。我相信Google Play dashboard可以让您将特定设备标记为不受支持,以便您可以尝试跟踪哪些设备工作不正常,并阻止人们在这些设备上使用该软件。Android限制打低级电话,所以你有点困了。正如我在上面回答Tim Tisdall时,我意识到了同样的事情,那就是电话问题。你对此有更多的见解吗?你能分享更多关于为什么会发生这种情况的细节吗?