Android、蓝牙、BTLE、GATT读取特性失败?

Android、蓝牙、BTLE、GATT读取特性失败?,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我有一个我正在开发的android应用程序。这是一个BTLE应用程序,我有一些BTLE标签需要与之交谈 我做的一切都是根据书,发现设备,关贸总协定连接(后续键合),写/读特性。。。它起作用了 现在奇怪的是,如果我关闭并打开应用程序两次,它就会停止工作 比如说,我已经有一个标签正确连接、粘合并且工作正常 电话重启。 第一次打开应用程序->一切正常。 关闭应用程序,再次打开->一切正常。 再次关闭应用程序,打开->无法从GATT回调接收任何readCharacteristic 在日志中,每次尝试都没

我有一个我正在开发的android应用程序。这是一个BTLE应用程序,我有一些BTLE标签需要与之交谈

我做的一切都是根据书,发现设备,关贸总协定连接(后续键合),写/读特性。。。它起作用了

现在奇怪的是,如果我关闭并打开应用程序两次,它就会停止工作

比如说,我已经有一个标签正确连接、粘合并且工作正常

电话重启。 第一次打开应用程序->一切正常。 关闭应用程序,再次打开->一切正常。 再次关闭应用程序,打开->无法从GATT回调接收任何readCharacteristic

在日志中,每次尝试都没有什么不同。我记录每次通话并打印返回状态:无差异。只有readChar回调永远不会被调用

Android是4.3,在不同的手机上有相同的问题(S3,S4,注3) (注意:在应用程序关闭时,我正确断开了所有GATT的连接)


你对检查什么有什么想法吗?或者这是一个已知的安卓bug?我已经搜索过了,但找不到任何东西……

Android 4.3(至少)上专为BTLE设计的蓝牙协议栈肯定存在一些问题。我不知道这是否是一个特定的供应商实现,驱动程序问题,或者其他什么,但对于开发人员来说,这确实是一个噩梦

这就是我发现的有助于改善情况的方法: -禁用Wifi -通过代码强制启用/禁用蓝牙(BluetoothAdapter方法enable()和disable())

事实上,当事情开始变得“不稳定”时,循环蓝牙开关确实可以解决它。这需要BLUETOOTH_ADMIN功能,显然不需要,因为它将短暂关闭所有蓝牙连接的小工具,并向用户弹出一些对话框,用户可以在其中禁用正在进行的重启

现在我得到了更稳定的结果


尽管如此,谷歌(或我不认识的任何人)让如此糟糕的软件在野外肆意传播还是让人感到羞耻

可悲的是,这就是我典型的经历,虽然你看起来比我更具一致性,但也许你可以调试得更多一些。在Android中搜索btle上的bug报告是个好主意。