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

Web Bluetooth:使用navigator.bluetooth.requestDevice时如何排除指定设备

Web Bluetooth API 如何排除特定名称的设备

Web Bluetooth API 的 navigator.bluetooth.requestDevice 方法目前不支持原生的排除式过滤,它的 filters 参数只提供包含性规则(比如按名称前缀、服务UUID等筛选想要的设备)。要排除指定名称的设备,只能通过「先获取符合基础条件的设备,再手动过滤排除」的方式实现。

具体实现方案

1. 先获取所有设备(或宽泛范围设备),再排除目标设备

如果没有特定的包含过滤需求,可以开启 acceptAllDevices: true 获取所有蓝牙设备,之后检查设备名称是否在排除列表中:

// 定义需要排除的设备名称数组
const excludedDeviceNames = ["设备A", "SPDCM-TEST", "旧版设备"];

// 封装蓝牙请求函数,方便重复调用
function requestAllowedBluetoothDevice() {
  return navigator.bluetooth.requestDevice({
    acceptAllDevices: true,
    optionalServices: [UUID_FOTA_SERVICE] // 替换为你的服务UUID
  }).then(device => {
    // 检查当前设备是否在排除列表中
    if (excludedDeviceNames.includes(device.name)) {
      alert("该设备已被禁止,请重新选择");
      // 递归调用,让用户重新选择
      return requestAllowedBluetoothDevice();
    }
    // 返回符合要求的设备
    return device;
  });
}

// 调用函数并处理合法设备
requestAllowedBluetoothDevice()
  .then(validDevice => {
    console.log("选中合法设备:", validDevice);
    // 后续连接设备等操作
  })
  .catch(error => {
    console.error("蓝牙请求失败:", error);
  });

2. 结合包含过滤缩小范围,再排除指定设备

如果原本就有筛选条件(比如你示例中的 namePrefix: "SPDCM"),可以先获取符合该前缀的设备,再排除其中特定名称的设备:

const excludedDeviceNames = ["SPDCM-001", "SPDCM-TEST"];

navigator.bluetooth.requestDevice({
  filters: [{ namePrefix: "SPDCM" }],
  optionalServices: [UUID_FOTA_SERVICE]
}).then(device => {
  if (excludedDeviceNames.includes(device.name)) {
    alert("该设备不在允许范围内,请重新选择");
    // 重新发起请求
    return navigator.bluetooth.requestDevice({
      filters: [{ namePrefix: "SPDCM" }],
      optionalServices: [UUID_FOTA_SERVICE]
    }).then(handleValidDevice);
  }
  handleValidDevice(device);
}).catch(error => console.error(error));

// 处理合法设备的逻辑
function handleValidDevice(device) {
  console.log("选中有效设备:", device);
  // 执行连接、数据交互等操作
}

注意事项

  • 这种方式无法在系统蓝牙选择界面隐藏排除的设备,只能在用户选中后进行二次校验和提示。
  • 如果设备名称为空或未广播名称,device.name 可能为 undefined,需要额外处理这种边界情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:42:57