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



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

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

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

BlueZ 文档指出以下内容

void RemoveDevice(object device)

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

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

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

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

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

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

最新更新