我正在编写一个使用蓝牙LE连接到我们设备的Android应用程序。
我们设备的一个通知是它是否在充电器上。这是一次触发的通知,并且在状态发生变化之前不会再次触发。
在iOS上,这都是hunky-dory。
然而,在Android上,无论如何连接到Android工作室时,我有时会在运行时看到一个数据包进入" onCharacteristicChanged"在时间X,然后完全相同的数据包 完全相同的时间 完全相同的特征。
有时在跑步时,我只会看到一个(预期的)。有时2份,有时4份。
它完全是疯了,我不知道它为什么会发生。我没有将蓝牙堆栈作为服务或其他任何东西运行。
这是一个真实的"问题,还是只是一个日志记录问题?我问,因为我们在其他特征中得到了其他包含序列号的数据包(尚未启用此功能),我担心这些数据包会失败,因为我们会得到重复的序列号!
答案 0 :(得分:0)
我想我发现了这个问题。我没有检查 onConnectionStateChange 回调中的状态。如果我看到状态已连接,我只是盲目地分配了gatt,并开始我的剩余程序向设备发送命令。
我认为我还有一个问题,即如果gatt已经存在,我总是打电话给 connectGatt 而不是连接。
我不得不说,虽然这是我的用户错误,Android API在这方面真的很愚蠢。你不必担心哪个"连接"调用和监视每个状态更改回调,担心您所在的线程以及是否已分配某些对象。