蓝牙 API:如何检测用户取消了 Mac OS 权限模式?

问题描述 投票:0回答:1

在 React 应用程序中使用 Web 蓝牙 API,我不知道当用户拒绝许可时如何检测它。

编辑:或者 - 如果您知道如何连接到用户计算机上已处于连接状态的蓝牙设备。

在 Mac 上,尝试连接蓝牙设备后有两种模式。第一个来自

navigator.bluetooth.requestDevice
,用户在其中选择他们的设备。第二个是权限模式,显示“要拒绝与设备的连接,请单击取消”:

Mac permission modal

但即使在您回复此模式之前或单击“取消”之后,以下代码也会运行。没有触发错误,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();
    }
  };
macos bluetooth web-bluetooth
1个回答
0
投票

如果你搬家我想你:

      device.ongattserverdisconnected = () => {
        console.log("Microbit disconnected");
        disconnectMicrobit();
      };

之前

const server = await device.gatt.connect();

然后就可以判断用户是否拒绝系统提示。

我尝试使用Logitech M720重现类似的序列,我发现在

device.gatt.connect()
之后,
server
会立即连接,直到用户拒绝提示。因此,如果您事先注册了
GattServerDisconnected
事件处理程序,您就可以判断用户是否拒绝系统提示。

© www.soinside.com 2019 - 2024. All rights reserved.