Android上的快速(1s)双重特征通知不会与外围设备断开连接

时间:2018-09-05 21:09:12

标签: android bluetooth-lowenergy

我们一直在研究定制的BLE外围设备小工具,并编写一个Android应用程序与之交互。我们发现了一种似乎无法找出的故障模式。

外围设备具有许多特征,其中一些标记为PROPERTY_INDICATE

通常该应用程序运行良好。特别是,当我们发出gatt.disconnect()并最终发出gatt.close()时,设备会感觉到断开连接并返回广告模式。

外设可以进入一种模式,尽管该模式每秒广播更改为2个特性的PROPERTY_INDICATE。当外设处于该模式并且我们断开连接时,设备将永远不会收到断开连接。某种程度上,Android设备(Samsung Tab2或Samsung S9)保持连接状态。我们知道它已连接,因为在关闭掌上电脑电源之前,设备不会感觉到断开连接。但是,如果查询BluetoothManager.getConnectedDevices(),则显示为0。

我们已经进行了多次迭代,尝试对原因进行三角剖分:

  • 减少特征计数->不变
  • 将更新速率降低到每2秒->成功
  • 更改特征之一以使用NOTIFY-> SUCCESS
  • 交错更改以使我们都更改,但彼此相差0.5秒,因此它们并不是完全相同的时间-> NO CHANGE

有人可以建议出什么问题吗?还是如何接近正在发生的事情?

对我们来说,快速解决方案将是第三个更改。对于这种情况,“通知”与“指示”并不那么重要。但这让我担心在不了解原因的情况下进行此类更改。

我们有该应用的iOS变体,没有任何这些问题。 iOS连接可以正常工作(意味着它可以正确断开连接),并且每秒都有两个指示。

1 个答案:

答案 0 :(得分:0)

在将应用程序移植为使用SweetBlue(实际上令我印象深刻的商业产品)后,此行为仍然存在。我们将修改外围设备以保留使用PROPERTY_INDICATION,在任何不重要的情况下,最好使用PROPERTY_NOTIFY。

最后,我的要点(直到有人出现更好的答案)是:

Android和PROPERTY_INDICATE不能很好地混合/缩放。开发人员要小心。