1

使用navigator.bluetooth.requestDevice(),我可以访问已经使用本机 OSX 蓝牙配对设置配对的蓝牙设备,但没有出现以前未配对的设备,即使它们的属性与我的通用查询匹配。可用设备以 Chrome 模式显示,请求用户同意配对,但唯一显示的设备是我已经配对的设备。

我在这里误解了预期的用例,还是有另一种方法可以从 Chrome 与附近的(以前未配对的)设备建立连接?

文档:https ://webbluetoothcg.github.io/web-bluetooth/ (参见示例 2)

function bluetoothConnect() {
  navigator.bluetooth.requestDevice({filters: [{services: ['generic_access']}]})
	  .then(device => {console.log(`Connected to: ${device.name}`)})
	  .catch(console.error);
}

4

2 回答 2

5

首先,正如我们所说,Mac OS X 还没有完全实现。目前只有发现和 GATT 服务器连接/断开连接有效。请参阅https://github.com/WebBluetoothCG/web-bluetooth/blob/gh-pages/implementation-status.md上的 Chrome 实施状态。查看 Chrome OS、Linux 和 Android M(Android Lollipop 解决方法)。

关于您的具体问题,我相信generic_access附近的 BLE 设备不会广播,而是因为您已经配对(缓存)了该设备而被发现。例如,如果您的设备名为“foo”,您可以访问https://googlechrome.github.io/samples/web-bluetooth/device-info.html并填写“foo”作为设备名称,然后点击“获取蓝牙”设备信息”按钮。

我建议您也尝试一下https://googlechrome.github.io/samples/web-bluetooth/index.html上的所有网络蓝牙示例。

于 2016-05-09T06:52:55.240 回答
2

为了补充其他答案,请注意 Chrome 的chrome://bluetooth-internals标签/工具。此工具不仅可以列出可用设备及其服务(我认为您不能使用 Web 蓝牙 API 来完成,除非您在optionalServices或中请求了服务filters/services)以及这些服务的特征。

在设备列表中,有一个Forget按钮,一旦您使用Inspect按钮连接到设备 GATT 服务器,该按钮就会变为活动状态。这应该允许您在需要端到端测试流的情况下完全取消配对并再次配对。

编辑:实际上在对此进行了一些实验之后,即使使用了“忘记”按钮,设备仍然保持配对状态。可能是 Chrome 中的一个错误,但是,配对设备的缓存似乎是每个配置文件。这意味着真正的答案是:

使用隐身模式,配对流程将从一开始就为每个新的隐身会话启动。

于 2019-01-26T18:31:27.687 回答