我使用Silicon Labs的BT 121构建了双模蓝牙设备。该设备通过经典连接实现SPP。经典节点的设备名称是“XYZ Classic”。它还在BLE中实现自定义服务(128位UUID)。 BLE节点的设备名称是“XYZ_BLE”。两个节点都具有相同的MAC地址。
在“蓝牙”设置下配对时,有时我会看到'XYZ Classic',有时我会看到'XYZ_BLE'。它似乎是随机配对的,但我测试的许多Android设备都倾向于想要与经典节点配对。配对后,通过经典/ SPP ALWAYS连接可以正常工作。但是,如果与BLE节点配对,我只能连接到自定义服务。如果与经典配对,我可以看到非自定义BLE服务,但不能看到我的自定义服务。总结一下:
Function Classic Pairing BLE Pairing
Spp Works Works
Cust BLE Doesn't Work Works
当我在代码(Android)中配对时,问题也会发生,尽管我搜索名为'XYZ_BLE'的设备然后配对返回的设备。我看了,但我看不到强迫Android配对BLE节点的方法。
到目前为止,我唯一的解决方法是修改我的BT 121固件,以便不允许在经典模式下进行绑定。这不是一个理想的解决方案,任何蓝牙经典唯一的设备将无法与我的设备绑定(实际上这可能不是太大的问题,但我有一个平板电脑,我只拥有蓝牙经典)。
应该注意的是,我使用了Play商店中的“BLE扫描仪”来验证我的自定义服务是否有效/取决于配对模式。换句话说,它不仅仅是我的代码。 :)
那么,有没有人对如何强制Android配对BLE节点有任何想法?
我看到类似的问题。一些提示:
Android行为会因您在BLE广告中设置的位标志而异。例如,有一点称为“无br / edr支持”。还有明确说明支持br / edr双重角色的位。
如果您从ble应用程序访问返回“未经过身份验证的错误”的特征,则可以强制执行配对。至少在iohone上,操作系统会自动启动配对。