关于Go-Bluetooth库中BLE连接与断开回调监听器的技术咨询
关于Go-Bluetooth库的BLE连接状态回调实现
Go-Bluetooth库支持通过事件订阅机制监听BLE连接的建立与断开状态,以下是具体实现方式:
1. 监听连接建立事件
你可以订阅全局的DeviceConnected事件,或针对特定设备对象监听连接状态变更,示例代码如下:
import ( "github.com/muka/go-bluetooth/api" "github.com/muka/go-bluetooth/bluez" ) func main() { // 订阅全局设备连接事件 sub, err := api.On(bluez.DeviceConnected, func(event interface{}) { dev := event.(*api.Device) println("设备已连接:", dev.Properties.Name) // 在此添加连接成功后的业务逻辑 }) if err != nil { panic(err) } defer sub.Unsubscribe() // 假设已发现目标设备并获取到device实例 device, err := api.GetDevice("XX:XX:XX:XX:XX:XX") if err != nil { panic(err) } // 发起BLE连接 err = device.Connect() if err != nil { panic(err) } }
2. 监听连接断开事件
通过订阅DeviceDisconnected或DeviceLost事件捕获断开状态,也可以给单个设备绑定断开回调:
// 订阅全局设备断开事件 subDisconnect, err := api.On(bluez.DeviceDisconnected, func(event interface{}) { dev := event.(*api.Device) println("设备已断开连接:", dev.Properties.Name) // 处理断开后的清理逻辑 }) if err != nil { panic(err) } defer subDisconnect.Unsubscribe() // 针对单个设备绑定断开回调 device.OnDisconnect(func(err error) { println("当前设备断开,错误信息:", err) })
补充说明
- 若使用低层级API,还可监听
bluez的PropertiesChanged信号,通过Connected属性的变化实现自定义回调。 - 订阅事件后记得调用
Unsubscribe()避免内存泄漏。
内容的提问来源于stack exchange,提问作者J V S Krishna
相关产品推荐
相关产品推荐

