在 React 应用程序中使用 Web 蓝牙 API,我不知道当用户拒绝许可时如何检测它。
编辑:或者 - 如果您知道如何连接到用户计算机上已处于连接状态的蓝牙设备。
在 Mac 上,尝试连接蓝牙设备后有两种模式。第一个来自
navigator.bluetooth.requestDevice
,用户在其中选择他们的设备。第二个是权限模式,显示“要拒绝与设备的连接,请单击取消”:
但即使在您回复此模式之前或单击“取消”之后,以下代码也会运行。没有触发错误,microbit 处于连接状态(2),Chrome 浏览器选项卡显示指示连接的蓝牙符号。
但它并没有真正联系起来。它在 Mac OS 上的“设置”->“蓝牙”下不存在,并且 microbit 不会响应发送命令的尝试。
是否有一些干净的方法可以检测到用户已取消权限模式?通过 GPT 或 Google 找不到任何相关信息。
const connectMicrobit = async () => {
try {
const device = await navigator?.bluetooth?.requestDevice(
bluetoothSearchOptions
);
if (!device) {
throw new Error(
"Unable to get device info. Unsupported browser likely."
);
}
const server = await device.gatt.connect();
const service = await server.getPrimaryService(MBIT_UART_SERVICE);
const rxCharacteristic = await service.getCharacteristic(
MBIT_UART_RX_CHARACTERISTIC
);
const txCharacteristic = await service.getCharacteristic(
MBIT_UART_TX_CHARACTERISTIC
);
const uart = new MicroBitUART(rxCharacteristic, txCharacteristic);
microbitUARTRef.current = uart;
device.ongattserverdisconnected = () => {
console.log("Microbit disconnected");
disconnectMicrobit();
};
} catch (error) {
console.error("There was an error connecting to the Microbit:", error);
disconnectMicrobit();
}
};
如果你搬家我想你:
device.ongattserverdisconnected = () => {
console.log("Microbit disconnected");
disconnectMicrobit();
};
之前
const server = await device.gatt.connect();
然后就可以判断用户是否拒绝系统提示。
我尝试使用Logitech M720重现类似的序列,我发现在
device.gatt.connect()
之后,server
会立即连接,直到用户拒绝提示。因此,如果您事先注册了 GattServerDisconnected
事件处理程序,您就可以判断用户是否拒绝系统提示。