在 Android 和 iOS 中连续 2 次连接和断开连接后,react-native-ble-plx 不会扫描 BLE 设备

问题描述

目前我正在连接到一个外围设备,该外围设备在从移动应用程序通过 BLE 接收到特定信息后立即断开连接并开始广告。 我观察到的是,在与移动设备连续 2 次连接后,该应用没有收到来自其周围任何设备的任何广告信标。

步骤:

  1. 应用扫描设备
  2. 用户选择设备并发送一些信息
  3. 设备立即断开连接或应用与设备断开连接
  4. 应用获取断开连接事件
  5. 转到第 1 步

这在 Android 的前两次尝试中非常有效,对于 iOS,它连续运行 5-6 次。 但此后应用无法再次获取信标或扫描设备。

这是扫描的代码片段:

function* scan(manager: BleManager): Generator<any,any,any> {
  yield put(log('Scanning started...'));
  console.debug('Scanning started...');

  const scanningChannel = yield eventChannel((emit) => {
    manager.startDeviceScan(
      null,{ allowDuplicates: false },(error,scannedDevice) => {
        if (error) {
          emit([error,scannedDevice]);
          return;
        }
        console.debug('device found',scannedDevice?.localName);
        if (
          scannedDevice != null &&
          scannedDevice.localName != null &&
          (scannedDevice.localName.toLowerCase().startsWith('my_ble_device')
          )
        ) {
          emit([error,scannedDevice]);
        }
      }
    );
    return () => {
      manager.stopDeviceScan();
    };
  },buffers.expanding(1));

  try {
    for (; ;) {
      const [error,scannedDevice]: [BleError,Device] = yield take(
        scanningChannel
      );
      if (error != null) {
      }
      if (scannedDevice != null) {
        yield put(deviceFound(scannedDevice));
      }
    }
  } catch (error) {
  } finally {
    yield put(log('Scanning stopped...'));
    if (yield cancelled()) {
      scanningChannel.close();
    }
  }
}

我可以看到日志扫描开始...但没有进一步的处理。

解决方法

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

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

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

相关问答

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