You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebUSB与Flutter连接设备时遇claimInterface调用失败问题

解决WebUSB调用claimInterface失败的问题

针对你遇到的NetworkError: Failed to execute 'claimInterface' on 'USBDevice': Unable to claim interface错误,下面是具体的排查和解决方法:

常见原因及解决步骤

  • 接口被其他进程占用
    你的代码用于连接ADB设备,而电脑上的ADB服务(adb进程)通常会自动抢占设备的USB接口。先关闭ADB服务再尝试连接:

    adb kill-server
    

    关闭后重新运行WebUSB代码,避免接口被ADB进程占用。

  • 配置或接口号不正确
    并非所有设备的默认配置都是1、接口都是0。在调用selectConfiguration前,先打印设备的配置信息确认实际参数:

    async function requestADBDevice() {
    try {
        const device = await navigator.usb.requestDevice({ filters: [] });
        await device.open();
        // 打印设备所有配置,确认正确的配置索引和接口号
        console.log('设备配置信息:', device.configurations);
        // 根据打印结果修改配置和接口号,比如部分设备配置是0
        await device.selectConfiguration(1);
        await device.claimInterface(0);
        console.log('Device connected:', device);
    
        window.adbDevice = device;
    
        return device;
    } catch (error) {
        console.error('Error: ' + error);
    }
    }
    

    比如部分设备的ADB接口可能是1,需要对应修改claimInterface的参数。

  • 接口已被当前页面占用未释放
    如果之前连接过设备但未正确释放接口,再次连接会失败。可以在claim前检查并释放接口:

    async function requestADBDevice() {
    try {
        const device = await navigator.usb.requestDevice({ filters: [] });
        await device.open();
        await device.selectConfiguration(1);
        // 检查接口是否已被占用,若占用则先释放
        if (device.interfaces[0].claimed) {
            await device.releaseInterface(0);
        }
        await device.claimInterface(0);
        console.log('Device connected:', device);
    
        window.adbDevice = device;
    
        return device;
    } catch (error) {
        console.error('Error: ' + error);
    }
    }
    
  • 设备权限或兼容性问题
    确保使用的浏览器支持WebUSB(如Chrome、Edge),设备已开启USB调试模式,并且浏览器已获得设备的访问授权。部分厂商的设备可能需要额外的驱动或设置才能被WebUSB识别。

内容的提问来源于stack exchange,提问作者mohammed_sajid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:00:57