如何使用 Chrome 网络蓝牙 API 启动新设备配对?
How to initiate a new device pairing using the Chrome web bluetooth API?
使用 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);
}
首先,Mac OS X 在我们说话时尚未完全实现。目前只有发现和 GATT 服务器 connect/disconnect 在工作。请参阅 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" 作为设备名称,然后点击 "Get Bluetooth Device Info" 按钮。
我建议您也尝试一下 https://googlechrome.github.io/samples/web-bluetooth/index.html 上的所有网络蓝牙示例。
为了补充其他答案,请注意 Chrome 的 chrome://bluetooth-internals
tab/tool。这个工具不仅可以列出可用的设备和它们的服务(我不认为你可以使用网络蓝牙 API 除非你在 optionalServices
或 filters/services
中请求服务)和这些服务的特点。
在设备列表中,有一个 Forget 按钮,一旦您使用 Inspect 按钮连接到设备 GATT 服务器,该按钮就会激活.这应该允许您在需要端到端测试流程的情况下完全取消配对并再次配对。
编辑: 实际上,在对此进行了一些实验之后,即使在使用“忘记”按钮后,设备仍然保持配对状态。可能是 Chrome 中的错误,但是,配对设备的缓存似乎是每个配置文件。这意味着真正的答案是:
使用隐身模式,配对流程将从每个新的隐身会话开始。
使用 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);
}
首先,Mac OS X 在我们说话时尚未完全实现。目前只有发现和 GATT 服务器 connect/disconnect 在工作。请参阅 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" 作为设备名称,然后点击 "Get Bluetooth Device Info" 按钮。
我建议您也尝试一下 https://googlechrome.github.io/samples/web-bluetooth/index.html 上的所有网络蓝牙示例。
为了补充其他答案,请注意 Chrome 的 chrome://bluetooth-internals
tab/tool。这个工具不仅可以列出可用的设备和它们的服务(我不认为你可以使用网络蓝牙 API 除非你在 optionalServices
或 filters/services
中请求服务)和这些服务的特点。
在设备列表中,有一个 Forget 按钮,一旦您使用 Inspect 按钮连接到设备 GATT 服务器,该按钮就会激活.这应该允许您在需要端到端测试流程的情况下完全取消配对并再次配对。
编辑: 实际上,在对此进行了一些实验之后,即使在使用“忘记”按钮后,设备仍然保持配对状态。可能是 Chrome 中的错误,但是,配对设备的缓存似乎是每个配置文件。这意味着真正的答案是:
使用隐身模式,配对流程将从每个新的隐身会话开始。