提问者:小点点

BlueZ:去除与BLE设备的粘合不起作用


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

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

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

BlueZ 文档指出以下内容

void RemoveDevice(object device)

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

之后,该应用程序仍然可以访问 GATT 特征。如果使用蓝牙ctl检查配对设备列表,则列表不再包含该设备。在调用 RemoveDevice() 之前,绑定的设备在那里可见。如果 bluetootd 停止并重新启动,应用程序将无法再读取/写入 GATT 特征,但需要重新绑定才能执行此操作。

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

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


共1个答案

匿名用户

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

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