weixin_41773229 2024-08-08 10:43 采纳率: 0%
浏览 25
已结题

usb-serial-for-android-master连接端口失败

做手机通过USB就连接外设的项目,参考usb-serial-for-android-master工程,从github下载的最新代码,但是usbSerialPort.open(usbConnection) 我这里一直失败,报错length =0;index=0 这个怎么处理?
修改就了就两处:
1.AndroidManifest.xml增加了uses-feature android:name="android.hardware.usb.host",
2.device_filter.xml增加了usb-device vendor-id="11409" product-id="2"
其他没有修改,直接运行的usbSerialExample到手机里。在手机上界面显示的刷出来三个口,显示是VID 2C91,跟我在XML中配置的一致。然后usbSerialPort.open(usbConnection) 这里执行不下去,报错connection failed:length =0;index=0

img

img

  • 写回答

20条回答 默认 最新

  • 阿里嘎多学长 2024-08-08 11:16
    关注
    获得0.45元问题酬金

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    您好!根据您提供的信息和遇到的问题,我将为您提供一个详细的解决方案和分析步骤。

    问题分析

    1. 权限配置:确保您的AndroidManifest.xml中已经正确添加了USB主机模式的权限。
    2. 设备过滤配置device_filter.xml文件中的vendor-idproduct-id需要与您的USB设备匹配。
    3. 设备识别:在手机上连接USB设备后,系统需要能够正确识别并列出设备。
    4. 端口打开失败usbSerialPort.open(usbConnection)失败可能是因为没有正确获取到设备连接或者端口索引不正确。

    解决方案

    1. 检查AndroidManifest.xml

      • 确保添加了以下权限:
        <uses-permission android:name="android.permission.USB_PERMISSION" />
        <uses-feature android:name="android.hardware.usb.host" android:required="true"/>
        
    2. 检查device_filter.xml

      • 确保vendor-idproduct-id正确无误,并且格式正确。
    3. 检查设备连接

      • 确保USB设备在连接时没有被其他应用占用,并且您的应用有权限访问它。
    4. 检查代码实现

      • 确保在调用usbSerialPort.open(usbConnection)之前,已经通过UsbManager获取了正确的UsbDeviceConnection

    示例代码

    以下是打开USB串行端口的示例代码:

    UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
    List<UsbDevice> deviceList = usbManager.getDeviceList();
    UsbDevice myDevice = null;
    
    // 遍历设备列表,找到匹配的设备
    for (UsbDevice device : deviceList) {
        if (device.getVendorId() == 11409 && device.getProductId() == 2) {
            myDevice = device;
            break;
        }
    }
    
    if (myDevice != null) {
        UsbDeviceConnection connection = usbManager.openDevice(myDevice);
        if (connection != null) {
            // 尝试打开端口
            UsbSerialPort[] ports = new UsbSerialPort[myDevice.getInterfaceCount()];
            for (int i = 0; i < myDevice.getInterfaceCount(); i++) {
                ports[i] = new UsbSerialPort(connection, i);
            }
            // 假设我们使用第一个端口
            if (ports[0] != null && ports[0].open() == UsbSerialPort.USB_SUCCESS) {
                // 端口打开成功,进行后续操作
            } else {
                // 端口打开失败处理
            }
        } else {
            // 设备连接失败处理
        }
    } else {
        // 设备未找到处理
    }
    

    假设数据和示例输入输出

    • 假设数据
      • 设备的vendor-id为11409,product-id为2。
    • 示例输入
      • 将具有上述ID的USB设备连接到Android设备。
    • 示例输出
      • 如果设备连接成功且权限正确,示例代码将成功打开端口并可以进行数据通信。

    注意事项

    • 确保您的Android设备已经开启了USB调试选项。
    • 如果问题依旧存在,尝试清理项目并重新编译。
    • 检查是否有其他库或代码与usb-serial-for-android库冲突。

    希望这些建议能够帮助您解决问题。如果还有其他问题或需要进一步的帮助,请随时提问。

    评论

报告相同问题?

问题事件

  • 系统已结题 8月16日
  • 修改了问题 8月8日
  • 修改了问题 8月8日
  • 修改了问题 8月8日
  • 展开全部

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?