网络蓝牙:为什么大多数设备“未知或不受支持”?

问题描述

我正在使用网络蓝牙连接到设备并读取名称和电池电量。 我让它工作了,但我想连接的设备是“未知或不受支持”,但我不知道为什么。在 requestDevice() 上,我只得到了我的 Iphone 和许多未知设备。

当我检查 chrome://bluetooth-internals 上的蓝牙设备时,我看到了一些已知设备,但不是我正在寻找的设备。我必须根据最新的 RSSI 猜测正确的设备。这对用户不友好。

有没有办法解决这个问题?或者有人可以解释为什么几乎所有设备都是未知或不受支持的。

我使用的是 Mac。 (如果这很重要)

更新@François Beaufort

enter image description here

nRF Connect 应用程序的屏幕截图。在应用程序中,设备有一个名称。我刚刚看到该设备在 bluetooth-internals 中也有一个名称,但它似乎并不总是宣传其名称

它说 Device type: Google 但它不是来自 Google 的设备。

解决方法

您在蓝牙浏览器选择器中看到的名称是蓝牙设备的可读名称。蓝牙设备可能有两种不同的名称类型:一种是蓝牙设备通告的名称,另一种是蓝牙设备在其数据库中作为其低功耗蓝牙通用访问配置文件 (GAP) 设备名称发布的名称。如果蓝牙设备具有这两种类型的名称,您将获得 GAP 设备名称。

如果您看到 "Unknown or Unsupported Device (12:34:56:78:9A:BC)",则表示蓝牙设备没有宣传其名称。为了减少蓝牙选择器中的噪音,如果您注意到您的蓝牙设备做广告,我建议您使用其他过滤器,例如 "services"。在 https://web.dev/bluetooth/#services-filter

查看完整的开发者文档
navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] })
.then(device => { /* … */ })
.catch(error => { console.error(error); });

更新:您可以在 Chrome 93 的“服务”列中的 chrome://bluetooth-internals/#devices 处看到广告服务。请参阅 https://chromiumdash.appspot.com/commit/49610d372d4d479f43e918d7bbf14537efd2769c

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...