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