我正在开发一个与自定义蓝牙设备通信的 Android 应用程序。调用 BluetoothGatt.Disconnect()
后,我看到调用了 OnConnectionStateChange
回调,新状态为 Disconnected
,但是,似乎发生这种情况与设备本身实际断开连接之间存在滞后。例如,如果我用已连接的设备调用 BluetoothManager.GetConnectionState(...),它仍会返回 Connected。有时 GetConnectionState
返回 Disconnected
需要几秒。这是正常的吗?有没有可能是我在我的应用程序中做错了什么导致了这种情况?例如从非 UI 踏板断开连接,或类似的东西?或者,是否有可能是物理蓝牙设备本身没有正确处理断开连接,可能没有及时完成断开连接事件?
最佳答案
Android的BLE系统太乱了。我已经看到了您所描述的内容,但更糟糕的是 - 您与 Android 断开连接,但在后台它与您的外围设备保持持久连接。
通常需要 30 秒才能最终断开连接,有时需要几分钟!一切都取决于您当时使用的手机。
如果你有能力,我强烈建议给外设添加一个断开连接的特性,这样你就可以通过编写断开连接请求来真正断开连接,让外设强制断开连接——然后 Android 会接收它。
我看到的好处是它始终有效(因为“硬”断开连接总是由 Android 接收,而“软”断开连接请求可能会在某些手机上引起一些问题)。通常“好”手机不会表现出这种行为(尤其是 Marshmallow 等),但在那些 KitKat 时代......哇......
另一个好处...如果您使用的是 iOS,您可以更快地扫描或重新连接到断开连接的外围设备。
关于Android BLE GATT 断开连接与设备断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44521828/