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

C++ WinRT调用BluetoothLEDevice::FromIdAsync出现访问被拒绝错误

解决C++ WinRT蓝牙LE连接80070005访问被拒绝问题

核心修复步骤

  1. 补全应用清单的蓝牙权限声明
    新建项目默认不会自动添加蓝牙相关设备能力,这是导致访问被拒绝的最常见原因。手动编辑Package.appxmanifest文件,在<Capabilities>节点下添加以下配置:
<DeviceCapability Name="bluetooth" />
<DeviceCapability Name="bluetooth.genericAttributeProfile">
  <Device Id="any">
    <Function Type="name:genericAttributeProfile" />
  </Device>
</DeviceCapability>

该配置声明了应用对蓝牙及GATT服务的访问权限,与微软示例项目的清单配置保持一致。

  1. 核对项目WinRT版本兼容性
    确保项目的平台版本设置支持蓝牙LE API的完整功能:
  • 右键项目 → 属性 → 通用Windows → 目标平台版本选择Windows 10 1709(10.0.16299.0)及以上
  • 最低版本建议不低于Windows 10 1607(10.0.14393.0),避免API兼容性问题
  1. 优化异常处理排查问题
    在现有代码中补充对ERROR_ACCESS_DENIED的捕获,快速定位权限类问题:
catch (hresult_error & ex)
{
    if (ex.to_abi() == HRESULT_FROM_WIN32(ERROR_DEVICE_NOT_AVAILABLE))
    {
        LogOnConsole(L"Bluetooth radio is not on.");
    }
    else if (ex.to_abi() == HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED))
    {
        LogOnConsole(L"访问被拒绝,请检查应用权限配置或系统权限设置。");
    }
    else
    {
        LogOnConsole(L"连接错误: " + ex.message());
    }
}
  1. 验证设备ID与系统权限
  • 确认使用的设备ID为当前可用的蓝牙LE设备ID,可通过DeviceInformation.FindAllAsync接口扫描获取正确ID
  • 检查系统设置中应用的蓝牙权限是否开启:进入Windows设置 → 应用 → 找到目标应用 → 权限 → 确保蓝牙权限已允许

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:25