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

时间:2019-09-18 07:05:15

标签: linux bluetooth bluetooth-lowenergy bluez

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

使用BlueZ的DBus-API,可通过使设备可配对,可发现并激活广告来实现绑定。绑定后,应用程序即可访问GATT服务和特征 (需要绑定才能读取/写入)在嵌入式设备上。

设置完成后,应该删除管理设置过程的设备(运行应用程序)的绑定。为此,我们称RemoveDevice()中的org.bluez.Adapter1

BlueZ文档指出以下内容

void RemoveDevice(object device)
  

这将删除给定位置的远程设备对象     路径。还将删除配对信息。

该应用仍然可以随后访问GATT特征。 如果使用bluetoothctl检查已配对设备的列表,则该列表不再包含该设备。调用RemoveDevice()之前,已绑定的设备在那里可见。 如果bluetootd已停止并重新启动,则该应用将不再能够读取/写入GATT特征,而是需要重新绑定。

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

这是预期的行为还是错误? “删除配对信息”是否也意味着“删除绑定信息”?如果这是预期的行为,我们如何正确终止与设备的绑定? 我应该使用BlueZ Management API代替BlueZ API吗?我不确定将DBus-API用作多源状态。

1 个答案:

答案 0 :(得分:1)

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

但是,请注意,如果仅使用加密特征,则仍然可以连接并发现服务。只有开始读取/写入加密特征后,Bluez才会检查您是否已绑定。