如何等待蓝牙配对成功?

问题描述

我是蓝牙新手,也对本机做出反应,我遇到了一个问题,我已经花了几天时间,但一直没有解决

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

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

所以总结一下,有没有办法等待配对成功,然后让用户进入下一阶段?他们可能会在同一天更换到许多不同的设备,所以我真的不能指望他们只需要成功配对一次就可以了。谢谢!

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);
              });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...