我正在开发一个Android应用程序。它是一个BTLE应用程序,我有一些我需要交谈的BTLE标签。
我完成了本书,发现设备,GATT连接(后续绑定),写/读特征......它的工作原理。
现在奇怪的是,如果我关闭并打开应用程序两次,它将停止工作。
我们说我已经有一个标签正确连接,绑定并正常工作。
手机重启。 第一次打开应用程序 - >一切正常。 关闭应用程序,再次打开 - >一切正常。 再次关闭应用程序,打开 - >无法从GATT回调中接收任何readCharacteristic。
在日志中,每次尝试都没有什么不同。我记录每个电话并打印返回状态:没有区别。只是从不调用readChar回调。
Android是4.3,不同手机上的问题相同(S3,S4,Note3) (注意:在应用程序关闭时我正确断开所有GATT的东西)
您对要检查的内容有什么想法吗?或者这是一个已知的安卓漏洞?我搜索过,但找不到任何东西......
答案 0 :(得分:2)
Android 4.3上的蓝牙堆栈(至少)特别针对BTLE肯定存在一些问题。我不知道这是一个特定的供应商实施,驱动程序问题,还是其他什么,但它确实是开发人员的噩梦。
我发现这有助于改善事物: - 禁用Wifi - 通过代码强制启用/禁用蓝牙(BluetoothAdapter方法启用()和禁用())
事实上,当事情开始变得“不稳定”时,开启和关闭蓝牙就可以解决问题。这需要BLUETOOTH_ADMIN功能,可能显然不需要,因为它会暂时关闭所有蓝牙连接的小工具,并会向用户弹出一些对话框,他/她可以禁用正在进行的重启。
现在我的结果越来越稳定。
但是,谷歌(或任何我不知道的人)羞于让这些糟糕的软件出现在野外。