无法将Android连接到特定的可扩展设备

无法将Android连接到特定的可扩展设备,android,bluetooth-lowenergy,rxandroidble,Android,Bluetooth Lowenergy,Rxandroidble,我正在维护一个遗留的Android应用程序,它可以从多个可编程外围设备检索数据。尝试添加对新外围设备的支持时,我发现应用程序无法连接到它。基本问题似乎是,当它调用.connectGatt()时,我立即得到一个“已连接”错误 我使用RxAndroidBle库编写了一些测试代码。关闭自动连接标志后,设备会报告已断开,然后报告连接,然后(大约1.5秒后)连接错误:已断开。当自动连接处于启用状态时,它将顺利通过断开、连接、已连接状态并正常工作 早期版本的测试允许在连接阶段继续扫描。如果自动连接处于启用状

我正在维护一个遗留的Android应用程序,它可以从多个可编程外围设备检索数据。尝试添加对新外围设备的支持时,我发现应用程序无法连接到它。基本问题似乎是,当它调用
.connectGatt()
时,我立即得到一个“已连接”错误

我使用
RxAndroidBle
库编写了一些测试代码。关闭
自动连接
标志后,设备会报告
已断开
,然后报告
连接
,然后(大约1.5秒后)连接错误:
已断开
。当
自动连接
处于启用状态时,它将顺利通过
断开
连接
已连接
状态并正常工作

早期版本的测试允许在连接阶段继续扫描。如果
自动连接
处于启用状态,它仍然可以工作,但它首先(错误地)报告“已连接”,然后几秒钟后自行修复并连接正常

无论设置了
autoConnect
,旧版应用程序都不会连接。到目前为止,我最好的猜测是,在找到设备后,应用程序并没有很快停止扫描(这不重要,但正如我们所了解的,有很多易碎的设备——正如前面提到的,问题只发生在这个设备上)。有没有可能仅仅是发现设备就导致它建立某种半断开的连接,从而阻止成功的连接


我使用的是API 21,因此无法尝试其他形式的
.connectGatt()
。Nordic的移动nRF扫描器应用程序成功连接,但我认为该应用程序充满了针对行为不端设备的变通方法

在Android 6.0及更高版本上,BluetoothDevice的connectGatt方法支持一个“transport”参数,该参数允许强制建立可恢复的连接。在旧版本的Android上,此版本的方法可以通过反射进行访问。使用传输选项可以解决许多双模设备的连接问题(至少对我来说-没有记录默认传输选项的实际功能-当两种模式都可用时,一些蓝牙协议栈可能更喜欢使用传输选项)


nRF Connect应该有一个选项来选择BLE连接而不是BR/EDR连接(甚至是默认设置)。

出现“已连接”错误是什么意思?Android的BLE API中没有定义此类错误。
RxAndroidBle
库定义了一个
BleAlreadyConnectedException