根据 Bluez API 文档(设备接口) 该方法的返回Connect()
表示一个或多个配置文件的成功连接:
无效连接()
(跳过)
如果至少一个配置文件已成功连接,则此方法将指示成功。
同时还有一个Connected
属性,描述为:
布尔值 已连接 [只读]
指示远程设备当前是否已连接。 PropertiesChanged 信号指示此状态的更改。
在实践中,方法的返回和通知属性被设置的信号Connect()
的到达似乎相隔几秒钟。PropertiesChanged
Connected
true
运行 bluetoothctl 时:
[bluetooth]# connect XX:XX:XX:XX:XX:XX
Attempting to connect to XX:XX:XX:XX:XX:XX
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
Connection successful
D-Bus 上捕获以下消息:
方法调用时间=1646854334.904791 发送者=:1.521 -> 目的地=org.bluez 序列=50 路径=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;接口=org.bluez.Device1;会员=连接 信号时间=1646854336.902736 发送者=:1.128 -> 目的地=(空目的地) 序列=10521 路径=/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX;接口=org.freedesktop.DBus.Properties;成员=属性已更改 字符串“org.bluez.Device1” 大批 [ 字典条目( 字符串“已连接” 变体布尔值 true ) ] 大批 [ ] 方法返回时间=1646854339.349113 发送者=:1.128 -> 目的地=:1.521 序列=10522 回复序列=50
这告诉我们:
- 当属性更改为信号 ( ) 所报告的
[CHG] Device XX:XX:XX:XX:XX:XX Connected: yes
时,屏幕上会出现。Connected
true
time=1646854336.902736
- 当该方法返回 ( ) 时,将出现该
Connection successful
消息。Connect()
time=1646854339.349113
- 这些事件发生的间隔为 2.4 秒。
问题是这两个事件之间有什么区别,哪一个事件实际上表示蓝牙设备已连接?
(断开设备连接时,Disconnect()
方法返回和信号到达0.003
相隔几秒)。
环境:Linux 内核:5.4-179
、Bluez:5.62-r3
、Systemd 249.9
:。