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

inTheHand BluetoothClient.DiscoverDevices()报空引用异常求助

问题背景

使用inTheHand.Net.Bluetooth库开发蓝牙通信程序,目标实现安卓手表与Windows设备的数据交互,同套代码在PC间经典蓝牙通信场景下运行正常,执行设备扫描逻辑时持续抛出空引用异常。

异常详情
  • 异常类型:System.NullReferenceException
  • 异常描述:

Object reference not set to an instance of an object.

  • 触发位置代码:
BluetoothClient client = new BluetoothClient();
foreach (var item in client.DiscoverDevices()) {
    // 业务处理逻辑
}
排查修复方案
  • 版本适配校验
    最新版inTheHand.Net.Bluetooth默认优先调用Windows系统BLE蓝牙栈,老旧版本仅适配经典蓝牙Win32栈,枚举安卓手表这类同时支持经典蓝牙+BLE的穿戴设备时,会因为BLE广播句柄初始化失败触发空引用。卸载当前项目引用的NuGet包,安装4.0.32及以上正式稳定版本,不要使用预览版包。
  • 替换扫描方法重载
    无参DiscoverDevices()方法默认仅扫描经典蓝牙设备,不会主动枚举BLE设备,遍历混合类型设备时会因为属性字段缺失触发空引用,替换为带全参数的重载方法,显式声明扫描规则:
    // 参数依次为:扫描时长(单位秒)、返回已配对设备、返回未识别设备、包含BLE设备
    var scannedDevices = client.DiscoverDevices(8, true, true, true);
    
  • 前置校验本地蓝牙适配器状态
    实例化BluetoothClient后不要直接触发扫描,先获取本地默认蓝牙适配器实例,确认适配器正常可用后再执行扫描,避免适配器实例为空触发异常:
    BluetoothClient client = new BluetoothClient();
    BluetoothRadio localRadio = BluetoothRadio.Default;
    if (localRadio == null)
    {
        throw new Exception("当前设备未检测到可用蓝牙适配器");
    }
    if (localRadio.Mode == RadioMode.PowerOff)
    {
        throw new Exception("本地蓝牙处于关闭状态,请开启后重试");
    }
    // 适配器校验通过后再执行设备扫描
    
  • 权限配置检查
    Windows平台扫描蓝牙设备需要对应权限:传统桌面程序需要右键以管理员身份运行;打包型桌面应用(MSIX/UWP/WinUI)需要在应用清单中勾选蓝牙、蓝牙通用属性配置文件权限,否则系统不会向应用返回BLE设备列表,库内部遍历空设备集合时会触发空引用。
  • 穿戴设备兼容处理
    安卓手表默认开启BLE隐私模式,未配对状态下广播的MAC地址为随机值,设备名称、服务列表等字段可能为空。先在Windows系统蓝牙设置页手动完成和手表的配对,再运行程序执行扫描,避免库读取空设备属性触发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:18:14