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