问题描述
我在那些支持它的设备(基于 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 跟踪)将解决该问题。