Android BLE GATT 断开连接与设备断开连接

标签 android bluetooth-lowenergy bluetooth-gatt

我正在开发一个与自定义蓝牙设备通信的 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/

相关文章:

android - 如何传递上下文?

java - Junit/Mockito - 等待方法执行

android - M4M-Mifare DESFire EV1 : Which Mifare AID needs to be added to NFC routing table for off-host routing to a Mifare DESFire virtual card on UICC?

bluetooth-lowenergy - 写入 GATT 描述符会产生写入不允许错误

android - 在工具栏中更改微调器样式

java - 如何启用通知并能够读取我的 BLE 代码?

ios - iOS什么时候显示 "need to bond"对话框?

bluetooth-lowenergy - BLE 规范是否允许在广告数据和扫描响应中使用制造商广告类型?

bluetooth - 为什么BILE的广告包有固定模式访问地址(0x8E89BED6)

javascript - 我可以通过网络蓝牙发送文件吗?