WebUSB 无法在某些 android 设备上声明设备

问题描述

我在那些支持它的设备(基于 Chromium 的桌面浏览器)上有一个使用 Web Serial 的 PWA,在所有其他设备(基本上是 Android)上我尝试通过 web serial polyfill 回退到 Web USB。

这适用于大多数设备,但在某些(至少一台)Android 设备上我无法声明该设备:

NetworkError: Unable to claim interface.

有趣的是,原生应用可以毫无问题地声明该设备。 有问题的设备是运行 Android 8 的三星 galaxy A5。

我检查了 chrome://device-log/ 那里一切正常:

[20:49:05] USB device added: id=1005 vendor=1155 "Betaflight",product=22336 "Betaflight STM32F411",serial="0x8000000",guid=9fa08f79-df5e-45bd-b757-c32ab1065bf9
[20:42:42] USB device removed: id=1004 guid=175af943-14ed-4591-a85b-b916a3a5584e
[20:40:42] USB device added: id=1004 vendor=1155 "Betaflight",guid=175af943-14ed-4591-a85b-b916a3a5584e

然后我用这个工具 https://larsgk.github.io/webusb-tester/ 进行了检查,它确认有两个接口并且它们都没有被声明:

2: Betaflight STM32F411 - VID: 0x0483,PID: 0x5740,S/N: 0x8000000
Interface 0 claimed: false
Interface 1 claimed: false

很遗憾,或者幸运的是,我找不到发生这种情况的任何其他设备,但由于它发生在一台设备上,因此它会发生在其他设备上。

我不完全确定发生了什么,特别是因为本机应用程序可以声明设备。

我能找到的唯一相关问题 id this one - 从我所见,如果我理解正确的话,似乎并没有真正的解决方案。

有什么方法可以查看 Android 设备上的声明内容? 我能做些什么来强制要求在 Android 上声明设备的所有权?

解决方法

我相信这是 that issue 的副本,自动分离 Android 上的驱动程序(由 Chromium issue 1099521 跟踪)将解决该问题。