我有一个运行GATT服务器的嵌入式系统,我试图通过Android连接到该服务器。任务很简单:连接到GATT服务器,导航特征并验证读/写功能。问题是,当我尝试连接Android应用时,它会尝试与“Passkey”配对,而不是与“Just Works”[https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx]配对。这是不可接受的,因为我的嵌入式设备没有任何方法向用户显示用于配对的密钥。所以连接方法必须是Just Works。
我尝试过Play商店中的众多应用程序,所有这些应用程序都只尝试与Passkey配对。但这是我正在使用的当前版本:https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner
我使用LightBlue应用程序(OS X和iOS支持)。所以我知道我的外围设备(GATT服务器)正在工作:广告,可连接,特征可访问等。
如何强制Android使用Just Works而不是Passkey配对?是否存在我缺少的外设配置?
由于
答案 0 :(得分:3)
问题的根源是Linux界面所处的模式。默认情况下支持BR / EDR(经典)和LE的蓝牙设备都处于双模式。也就是说,它们可以作为Classic或LE设备运行。我没有深入了解Android API,也没有尝试开发可以检测双模设备并选择使用Just Working配对连接为LE的Android应用。但是我能够在界面上禁用BR / EDR并验证Android在扫描期间检测到它作为仅LE(单模式)接口。然后Android应用程序使用Just Working配对无缝连接。
以下是我在界面上禁用BR / EDR的方法:
$ sudo hciconfig hci0 down
$ sudo ./btmgmt bredr off
hci0 Set BR/EDR complete, settings: connectable bondable le
$ sudo hciconfig hci0 up
$ sudo hciconfig hci0 leadv
您可以通过下载和构建Bluez在Linux中构建btmgmt应用程序。 btmgmt应用程序是在--enable-experimental
config参数上有条件构建的。
<强>更新强> 另一种方法是修改接口功能,而不是修改广播接口功能。这是通过广告标志完成的。修改标记以广播不支持BR / EDR。这是第2位,将创建一个0x04的标志广播。 (参见Bluetooth SIG doc CSS v4:A部分,第1.3.2节)