4

我是蓝牙新手,也对本机反应,我遇到了一个我花了几天时间解决的问题,但我还没有解决。

我正在使用 react-native-ble-plx 库开发一个应用程序,但我在使用 react-native-ble-manager 时遇到了同样的问题。我已经被要求我们需要具有数字比较的安全级别 3,并且在应用程序的第一个屏幕中,用户应该扫描打印机上的 QR 码,它会为蓝牙库扫描仪提供它应该查找的名称因此用户不必查看任何其他设备。

这工作正常,但问题是当配对开始时,应用程序应该等到配对完成后再进入下一个屏幕,但我还没有看到任何方法来做到这一点。所以发生的情况是,一旦设备连接并检索服务,即使用户中止配对,下一个 then-function 也会被触发,因为从技术上讲,我猜连接仍然处于活动状态,因为它正在等待配对完成。我已经在代码示例中标出了我的意思。

所以总结一下,有没有办法在允许用户进入下一阶段之前等待成功配对?它们可能会在同一天更改为许多不同的设备,所以我不能指望它们只需成功配对一次就可以了。谢谢!

bleManager.startDeviceScan(
        null,
        {scanMode: ScanMode.LowLatency},
        (err, device) => {
          if (err) {
            setLoading(false);
            return;
          }

          if (device && device.name === printer.printerName) {
            bleManager.stopDeviceScan();
            device
              .connect({timeout: 10000})
              .then((d) => {
                return d.discoverAllServicesAndCharacteristics();
              })
              .then((d) => {
                //THIS SHOULD ONLY HAPPEN IF PAIRING WAS COMPLETED
                dispatch({
                  type: 'SET_PRINTER',
                  payload: {
                    printerId: d.id,
                    printerName: printer.printerName,
                    isBluetooth: printer.isBluetooth,
                    printerNetworkId: printer.id,
                  },
                });

                setLoading(false);

                navigation.canGoBack()
                  ? navigation.goBack()
                  : navigation.navigate(patientRoute);
              })
              .catch((error) => {
                console.log(error);
                setLoading(false);
              });
4

0 回答 0