Android OnCharacteristic在同一时间戳更改了多个数据包

Android OnCharacteristic在同一时间戳更改了多个数据包,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我正在编写一个Android应用程序,它使用蓝牙LE连接到我们的设备 我们的设备将发出的通知之一是它是否在充电器上。这是一个只触发一次的通知,在状态更改之前不会再次触发 在iOS上,这一切都很好 然而,在Android上,不管怎样,当连接到Android studio时,我有时会在运行时看到一个数据包进入“onCharacteristicChanged”,即在时间X,然后是在时间X的完全相同的数据包到完全相同的特征 有时候跑步时,我只会看到一个(预期的)。有时2份,有时4份 这完全是疯了,我不知

我正在编写一个Android应用程序,它使用蓝牙LE连接到我们的设备

我们的设备将发出的通知之一是它是否在充电器上。这是一个只触发一次的通知,在状态更改之前不会再次触发

在iOS上,这一切都很好

然而,在Android上,不管怎样,当连接到Android studio时,我有时会在运行时看到一个数据包进入“onCharacteristicChanged”,即在时间X,然后是在时间X的完全相同的数据包完全相同的特征

有时候跑步时,我只会看到一个(预期的)。有时2份,有时4份

这完全是疯了,我不知道为什么会这样。我没有将蓝牙协议栈作为服务或任何东西运行


这是一个“真正的”问题,还是仅仅是一个日志问题?我这样问是因为我们在其他特性中得到的其他数据包都有序列号(还没有启用),我担心这些数据包会失败,因为我们会得到重复的序列号

我想我找到了问题所在。我没有在onConnectionStateChange回调中检查状态。如果我看到状态是连接的,我只是盲目地分配gatt,然后开始我的剩余过程,向设备发送命令

我想我也遇到了一个问题,那就是如果关贸总协定已经存在,我总是打电话给connectGatt,而不是connect


我不得不说,虽然这是我的用户错误,但Android API在这方面真的很愚蠢。您不必担心调用哪个“连接”并监视每个状态更改回调,也不必担心您所在的线程以及是否已经分配了某些对象

我想我找到了问题所在。我没有在onConnectionStateChange回调中检查状态。如果我看到状态是连接的,我只是盲目地分配gatt,然后开始我的剩余过程,向设备发送命令

我想我也遇到了一个问题,那就是如果关贸总协定已经存在,我总是打电话给connectGatt,而不是connect


我不得不说,虽然这是我的用户错误,但Android API在这方面真的很愚蠢。您不必担心调用哪个“连接”并监视每个状态更改回调,也不必担心您所在的线程以及是否已经分配了某些对象

我认为您每次都启用了特征通知。请确保您仅第一次启用它。我认为您每次都启用了特征通知。确保您仅在第一次启用它。