我们有一个用例,其中使用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用作多源状态。
答案 0 :(得分:1)
RemoveDevice()确实也删除了绑定信息。因此,您必须先断开连接,然后再调用RemoveDevice()。下次连接时,绑定信息将消失。
但是,请注意,如果仅使用加密特征,则仍然可以连接并发现服务。只有开始读取/写入加密特征后,Bluez才会检查您是否已绑定。