[英]Unable to connect Android to a specific BLE device
我正在维护一个可从多个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 6.0和更高版本上,BluetoothDevice的connectGatt方法支持允许强制BLE连接的'transport'参数。 在较旧的Android版本上,可以通过反射来访问此方法的该版本。 使用TRANSPORT_LE选项可以解决许多双模设备的连接问题(至少对我来说-没有记录默认的TRANSPORT_AUTO选项的实际作用-当两种模式都可用时,某些蓝牙堆栈可能更喜欢BLE)
nRF Connect应该有一个选项,使BLE连接优于BR / EDR(甚至默认为BLE连接)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.