2017-10-14 90 views
0

这似乎是一个奇怪的问题,因为我看到的大多数抱怨是相反的;如果没有用户干预,就无法让Android自动重新连接到BTLE设备。无法阻止Android重新连接后BluetoothGatt.close()

正常行为

在这种情况下,我连接到BTLE设备和断开连接时,我调用BluetoothGatt.connect()和不调用BluetootGatt.close()。现在在正常情况下,这将导致我想要的。当设备稍后重新发布广告时,Android会重新连接,无需用户干预。

关机的应用

现在我要关闭我的应用程序。所以我所做的是系统地删除所有的BluetoothGattCallback对象。这些对象中的每一个都表示正在进行或正在进行BTLE连接。移除涉及发送断开连接并最终在这些对象中的每一个上调用BluetoothGatt.close()。

问题

然而,设备再次开始刊登广告时,它会从Android连接事件。但是没有应用可以处理它。该设备保持在该状态,但由于BTLE心跳数据包不断交换,所以没有取得进展。当然,该设备可能会超时并断开连接,但我发现问题在Android上。我无法关闭它!

一个糟糕的解决方案

什么我能做的就是关闭蓝牙在Android上。释放连接并断开设备。我不认为这是一个有效的解决方案。

发生在所有的机器人会我曾尝试

上我已经尝试了所有的Android设备被观察到这种现象,所以一定是有什么我做错了在BluetoothCallback对象的关闭。 这是'保持活力'的未决连接()的结果?

回答

0

只要您关闭,Android会删除挂起的连接(除非其他BluetoothGatt对象指向其他某个应用中的相同设备)。手机上是否有其他正在运行的BLE应用程序?

你也可以调用disconnect()紧跟close(),它应该做同样的事情,但如果Android设备有一个错误的BLE堆栈,有时可能会更好。你测试过哪些设备?

+0

我在关闭应用程序时调用disconnect和Gatt.close()。不过,我可能会反对Android的模糊性,即使我关闭了应用程序,Android可能会选择将其保留在后台。如果不同的平台看起来反应不同,那么你是对的。我主要在Moto E4和其他一些平台上注意到这个问题。但是Galaxy Nexus 5似乎并没有采取相同的行为。相同的代码正在运行... –

相关问题