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

C++/CX UWP开发中BluetoothLEAdvertisementWatcher.Received事件未触发求助

问题排查方案
  • 检查UWP应用清单权限配置
    打开项目中的Package.appxmanifest文件,切换到「功能」选项卡,勾选蓝牙权限,缺少该权限会导致扫描静默失败,不会触发任何前台报错。
  • 确认BluetoothLEAdvertisementWatcher对象的生命周期
    要确保bleAdvertisementWatcher是全局变量或者类成员变量,如果是在方法内声明的局部变量,会被运行时自动回收,导致事件绑定失效、扫描直接停止。
  • 新增Stopped事件监听排查启动异常
    扫描启动后如果遇到权限不足、蓝牙硬件关闭等问题,会立刻触发Stopped事件,你可以绑定该事件查看具体错误原因:
    // 在initApp方法中添加以下代码
    bleAdvertisementWatcher->Stopped += ref new Windows::Foundation::TypedEventHandler<Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher^, Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs^>(
        [](Bluetooth::Advertisement::BluetoothLEAdvertisementWatcher^ watcher, Bluetooth::Advertisement::BluetoothLEAdvertisementWatcherStoppedEventArgs^ eventArgs) {
            auto error = eventArgs->Error;
            // 可在此处打印错误码排查问题:
            // BluetoothError::RadioNotAvailable 代表本机蓝牙未开启
            // BluetoothError::PermissionDenied 代表应用无蓝牙权限
            // BluetoothError::OtherError 代表其他未知错误
        });
    
  • 调整扫描模式测试
    部分BLE设备不会响应主动扫描的请求,你可以先将ScanningMode改为BluetoothLEScanningMode::Passive测试是否能收到广播包。
  • 排除硬件和周边设备问题
    先通过Windows系统自带的蓝牙设置界面扫描周边BLE设备,确认本机蓝牙功能正常、附近存在正在广播的BLE设备,避免因设备本身未广播导致收不到事件。
  • 检查回调逻辑合法性
    如果你的do_something逻辑中包含UI操作,必须通过Dispatcher调度到UI线程执行,否则会触发后台线程异常,导致后续事件无法正常触发:
    // 回调内UI操作示例(需要在lambda捕获列表添加this)
    this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, 
        ref new Windows::UI::Core::DispatchedHandler([this, eventArgs]() {
            // 在这里执行更新UI的逻辑,比如显示设备名称、MAC地址
        }));
    

内容的提问来源于stack exchange,提问作者David Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:36:03