BlueZ:移除与 BLE 设备的绑定不起作用

BlueZ: Removing bonding with BLE device does not work

我们有一个用例,其中使用 BLE 连接通过 Android 应用程序(稍后也通过 iPhone 应用程序)对嵌入式设备进行基本配置。嵌入式设备运行 Linux,因此使用 BlueZ 作为蓝牙堆栈。

使用 BlueZ 的 DBus-API,通过使设备可配对、可发现和激活广告,绑定成为可能。绑定后应用程序可以访问 GATT 服务和特性 (要求在嵌入式设备上绑定 read/written)。

设置完成后,管理设置过程的设备(运行 应用程序)的绑定应该被删除。为了做到这一点,我们调用 RemoveDevice() of org.bluez.Adapter1.

BlueZ 文档说明如下

void RemoveDevice(object device)

This removes the remote device object at the given path. It will remove also the pairing information.

之后应用程序仍然可以访问 GATT 特性。 如果 bluetoothctl 用于检查配对设备列表,则该列表不再包含该设备。在调用 RemoveDevice() 之前绑定的设备在那里是可见的。 如果 bluetootd 停止并重新启动应用程序将不再能够 read/write GATT 特性,但需要在这样做之前重新绑定。

我既无法在 BlueZ 文档中找到任何进一步的信息,也无法在其他任何地方搜索到有关此主题的任何信息。

这是预期的行为还是错误? "remove pairing information" 是否也意味着 "remove bonding information"?如果这是预期的行为,我们如何正确终止与设备的绑定? 我应该使用 BlueZ Management API 而不是 BlueZ API 吗?我不确定这一点,因为多个源状态表明 DBus-API 是可行的方法。

RemoveDevice() 确实也删除了绑定信息。所以你必须先断开连接,然后再调用 RemoveDevice()。下次连接时,绑定信息将消失。

但是请注意,如果您只使用加密特性,您仍然可以连接和发现服务。只有在您启动 reading/writing 加密特征后,Bluez 才会检查您是否绑定。