You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:55:15