我有一个运行 GATT 服务器的嵌入式系统,我尝试通过 Android 连接该服务器。任务很简单:连接到 GATT 服务器、导航特征并验证读/写功能。问题是当我尝试连接 Android 应用程序时,它尝试与“Passkey”而不是“Just Works”配对 [https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx] https://developer.bluetooth.org/TechnologyOverview/Pages/LE-Security.aspx%5D。这是不可接受的,因为我的嵌入式设备没有任何方法向用户显示用于配对的密钥。所以连接方法必须是Just Works。
我已经尝试了 Play 商店中的许多应用程序,但它们都只尝试与 Passkey 配对。但这是我目前正在使用的:https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner
我使用 LightBlue 应用程序(在 OS X 和 iOS 中受支持)进行此工作。所以我知道我的外围设备(GATT 服务器)正在工作:广告、可连接、可访问特性等。
如何强制 Android 使用 Just Works 而不是密钥配对?我是否缺少外围配置?
Thanks
问题的根源在于 Linux 界面所处的模式。默认情况下同时支持 BR/EDR(经典)和 LE 的蓝牙设备处于双模式。也就是说,它们可以作为 Classic 或 LE 设备运行。我对 Android API 没有深入了解,也没有尝试开发一个可以检测双模设备并选择使用“正常工作”配对作为 LE 进行连接的 Android 应用程序。但我能够在接口上禁用 BR/EDR,并验证 Android 在扫描期间将其检测为仅 LE(单模式)接口。然后,Android 应用程序使用 Just Work 配对进行无缝连接。
以下是我在接口上禁用 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
配置参数。
UPDATE:另一种方法是不修改接口能力,而只修改广播的接口能力。这是通过广告标志完成的。修改标志以广播不支持 BR/EDR。这是位 2,将创建 0x04 的标志广播。 (请参阅蓝牙 SIG 文档 CSS v4:A 部分,第 1.3.2 节)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)