React-Native-Ble-Plx, Android, connectToDevice() несколько раз терпит неудачу после нескольких успехов

реактивный род 0.59.1

response-native-ble-plx 1.0.3

Это проблема только для Android.

Наше приложение подключается к стиральной и сушильной машинам через Bluetooth. наш MachineListScreen списки доступных машин

  • machineA
  • machineB
  • machineC

С помощью react-native-ble-plx метод connectToDevice(machine) мы успешно можем подключиться к machineA, machineB, а также machineC, переход к 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 ответов

Другие вопросы по тегам