【发布时间】:2019-07-29 21:01:48
【问题描述】:
我正在尝试通过 WEBUSB 将 USB 热敏打印机连接到我的 Android 平板电脑(Samsung Galaxy Tab S4、Android 9),但在尝试声明接口时出现此错误: “未能声明接口 0:设备或资源繁忙 (16)”
我正在发布代码,但我认为问题不在这里,因为它在 Windows 10 上运行良好(使用 Zadig 将默认驱动程序更改为 WinUSB 后):
this.printerProvider = navigator['usb'];
this.printerProvider.requestDevice({filters: []})
.then(selectedDevice => {
this.device = selectedDevice;
return this.device.open();
})
.then(() => {
return this.device.selectConfiguration(1);
})
.then(() => {
return this.device.claimInterface(this.device.configuration.interfaces[0].interfaceNumber);
})
.then(() => {
for (let ep of this.device.configuration.interfaces[0].alternate.endpoints) {
if (ep.direction == 'out') {
this.endpoint = ep;
console.log('USB PRINTER CONNECTED')
}
}
})
.catch((err) => {
console.log(err);
})
事实上,我使用本文中提供的不错的工具得到了相同的结果: https://labs.mwrinfosecurity.com/blog/webusb/ 这个工具基本上试图声明所有的接口。
所以,我的猜测是 Android 本身已经声明了该接口。 我还尝试启用开发人员选项以查看那里是否有有用的东西,但我没有找到任何东西。
非常感谢任何帮助。
垫子
【问题讨论】:
-
您要声明的接口的接口类是什么?您说您必须更改 Windows 10 上的默认驱动程序,Windows 加载的是什么驱动程序?
-
您好,感谢您的回答,这是我从 chrome://usb-internals 得到的:配置 1 -- 接口 0 ---- 备用 0 ------ 类代码 7 - ----- 子类代码 1 ------ 协议代码 2 ------ 端点 1 (IN) ------ 端点 3 (OUT) --------Usb 传输类型:BULK --------Packet Size: 64 ``` 老实说,我不记得 windows 正在加载的默认驱动程序。
标签: android progressive-web-apps webusb