几次成功后,Android React-Native-Ble-Plx,connectToDevice()反复失败

时间:2019-07-17 15:49:32

标签: android react-native bluetooth bluetooth-gatt react-native-ble-plx

本机0.59.1

react-native-ble-plx 1.0.3

这是一个仅限Android的问题。

我们的应用程序通过蓝牙连接洗衣机和烘干机。我们的MachineListScreen列出了可用的机器

  • machineA
  • machineB
  • machineC

使用react-native-ble-plx方法connectToDevice(machine),我们可以成功连接到machineAmachineBmachineC,过渡到ConnectedToMachineScreen并进行互动。

这仅起作用一次!

下次我们connectToDevice(machine)时,它只是无法连接。错误是DeviceConnectionFailed。这是由于我们强加了连接尝试超时,但这并不重要。我们的连接尝试超时时间为10秒。但是我们尝试将其提高到30秒,60秒等,但仍然失败。

在iOS上不会发生这种情况。 iOS反复连接。

问题

在Android上,是否可能需要BluetoothGatt.refresh()才能重新连接到计算机?如果是这样,是否有人知道如何使用以下connectToDevice()选项来做到这一点:

connectToDevice(machine, { refreshGatt: ? })此项的值是什么?

失败了,有人有其他建议吗?

这是代码。

_handleMachinePress = async machine => { 
  try {  
    this.setState({ loading: true });
    await ble.connectionManager.connectToMachine(machine);
    const passProps = { ...props };
    navigateToScreen(ConnectedToMachineScreen, passProps);
  } catch (error) {
    console.warn(error);
  } finally {
    this.setState({ loading: false });
  }
}


export const connectToMachine = async machine => {  
  return new Promise(async (resolve, reject) => {
    let connectedDevice;
    try {
      connectedDevice = await ble.connectToDevice(machine.id, { timeout: 10000 });
    } catch (error) {
      try {
        await timeout(5000);
        connectedDevice = await ble.connectToDevice(machine.id, { timeout: 10000});
      } catch (error) {
        reject(error);
        return;
      }
    }
    try {
      const exploredDevice = await connectedDevice.discoverAllServicesAndCharacteristics();
      await exploredDevice.services();
      resolve();
    } catch (error) {
      reject(error);
    }
  });
};

0 个答案:

没有答案