我们一直在研究定制的BLE外围设备小工具,并编写一个Android应用程序与之交互。我们发现了一种似乎无法找出的故障模式。
外围设备具有许多特征,其中一些标记为PROPERTY_INDICATE
。
通常该应用程序运行良好。特别是,当我们发出gatt.disconnect()
并最终发出gatt.close()
时,设备会感觉到断开连接并返回广告模式。
外设可以进入一种模式,尽管该模式每秒广播更改为2个特性的PROPERTY_INDICATE。当外设处于该模式并且我们断开连接时,设备将永远不会收到断开连接。某种程度上,Android设备(Samsung Tab2或Samsung S9)保持连接状态。我们知道它已连接,因为在关闭掌上电脑电源之前,设备不会感觉到断开连接。但是,如果查询BluetoothManager.getConnectedDevices(),则显示为0。
我们已经进行了多次迭代,尝试对原因进行三角剖分:
有人可以建议出什么问题吗?还是如何接近正在发生的事情?
对我们来说,快速解决方案将是第三个更改。对于这种情况,“通知”与“指示”并不那么重要。但这让我担心在不了解原因的情况下进行此类更改。
我们有该应用的iOS变体,没有任何这些问题。 iOS连接可以正常工作(意味着它可以正确断开连接),并且每秒都有两个指示。
答案 0 :(得分:0)
在将应用程序移植为使用SweetBlue(实际上令我印象深刻的商业产品)后,此行为仍然存在。我们将修改外围设备以保留使用PROPERTY_INDICATION,在任何不重要的情况下,最好使用PROPERTY_NOTIFY。
最后,我的要点(直到有人出现更好的答案)是: