我们有一个用例,其中BLE连接用于通过Android应用程序(后来也通过iPhone应用程序)对嵌入式设备进行基本配置。嵌入式设备运行Linux,因此使用BlueZ作为蓝牙堆栈。
使用 BlueZ 的 DBus-API
,通过使设备可配对、可发现和激活广告来实现绑定。绑定后,应用程序可以访问嵌入式设备上的 GATT 服务和特性(需要绑定才能读取/写入)。
设置完成后,应该删除管理设置过程的设备(运行应用程序)的绑定。为了做到这一点,我们调用 org.bluez.Adapter1
的 RemoveDevice()。
BlueZ 文档指出以下内容
void RemoveDevice(object device)
这将删除给定路径上的远程设备对象。它还将删除配对信息。
之后,该应用程序仍然可以访问 GATT 特征。如果使用蓝牙ctl
检查配对设备列表,则列表不再包含该设备。在调用 RemoveDevice()
之前,绑定的设备在那里可见。如果 bluetootd
停止并重新启动,应用程序将无法再读取/写入 GATT 特征,但需要重新绑定才能执行此操作。
我既无法在BlueZ文档中找到任何进一步的信息,也无法在其他任何地方搜索有关此主题的任何内容。
这是预期行为还是错误?“删除配对信息”是否也意味着“删除绑定信息”?如果这是预期行为,我们如何正确终止与设备的绑定?我应该使用 BlueZ Management API 而不是 BlueZ API 吗?我不确定这是多源状态,DBus-API 是要走的路。
RemoveDevice() 确实也删除了绑定信息。所以你必须先断开连接,然后调用RemoveDevice()。下次连接时,绑定信息将消失。
但是,请注意,如果您仅使用加密特征,您仍然可以连接和发现服务。只有当你开始读取/写入加密的特征时,Bluez才会检查你是否被绑定。