Я работаю над POC, где я использую экспериментальный интерфейс сканирования BLE для обнаружения нескольких устройств Bluetooth и подключения к их службам GATT из веб-приложения.
Запрос одного устройства с использованием navigator.bluetooth.requestDevice
дает устройство, на котором я могу подключиться к серверу GATT.
Когда я пытаюсь обнаружить устройства с помощью requestLEScan
, полученные мной устройства не позволяют мне подключиться к серверу GATT.
const [ devices, dispatch ] = useReducer(reducer, {});
const scanClick = () => {
navigator.bluetooth.requestLEScan({
acceptAllAdvertisements: true,
}).then((scan) => {
setTimeout(() => scan.stop(), 10000);
});
navigator.bluetooth.addEventListener('advertisementreceived', (event) => {
console.log("DEVICE DETECTED", event);
parseBluetoothDevice(event.device).then(x => x && dispatch(x));
});
}
const parseBluetoothDevice = async (device) => {
// Should return a representation with the device information I want to display
await device.gatt.connect();
...
}
Вызов device.gatt.connect()
вызывает ошибку:
Операция GATT не разрешена
Как мне получить доступ к серверу GATT на обнаруженном устройстве?
Моя проблема в том, что мне нужно вызвать permissions.request()
, который еще не реализован для Bluetooth? (Статус реализации Bluetooth)
Я попытался вместо установки acceptAllAdvertisement
передать filters
с UUID службы, который, как я знаю, поддерживает мои устройства и который я хочу запросить, но тогда я не вижу результатов сканирования.
Я использую Chrome 83.0.4103.97 на MacOS с включенными «экспериментальными веб-функциями».