【发布时间】:2018-05-11 23:50:02
【问题描述】:
我正在维护一个从多个 BLE 外围设备检索数据的旧版 Android 应用。尝试添加对新外围设备的支持,我发现应用程序无法连接到它。基本问题似乎是,当它调用.connectGatt() 时,我立即收到“已连接”错误。
我使用RxAndroidBle 库编写了一些测试代码。关闭autoConnect 标志后,设备会报告DISCONNECTED,然后是CONNECTING,然后(大约1.5 秒后)出现连接错误:Disconnected from <device address>。当autoConnect开启时,会顺利通过DISCONNECTED、CONNECTING、CONNECTED状态并正常运行。
我的测试的早期版本允许在连接阶段继续扫描。如果autoConnect 开启,它仍然有效,但它首先(错误地)报告“已经连接”,然后几秒钟后自行修复并连接正常。
无论autoConnect 的设置如何,旧版应用都不会连接。到目前为止,我最好的猜测是,该应用程序在找到设备后并没有很快停止扫描(这无关紧要,但正如我们所知,那里有很多片状 BLE 设备 - 如上所述,问题仅在此设备上发生)。是否有可能只是发现设备会导致它建立某种半断开的连接,从而阻止成功连接?
我使用的是 API 21,因此无法尝试其他形式的 .connectGatt()。 Nordic 的移动 nRF 扫描仪应用程序连接成功,但我认为该应用程序充满了针对行为不端设备的解决方法。
【问题讨论】:
-
“已连接”错误是什么意思? Android 的 BLE API 中没有定义这样的错误。
-
RxAndroidBle库定义了一个BleAlreadyConnectedException。
标签: android bluetooth-lowenergy rxandroidble