ArrayIndexOutOfBoundsException: at android.hardware.usb.UsbInterface.getEndpoint

img

代码如下:


public int SignatureWithExPinpad() {
        String ACTION_USB_PERMISSION = "cn.wch.wchusbdriver.USB_PERMISSION";
        // Find all available drivers from attached devices.
        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
        List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
        if (availableDrivers.isEmpty()) {
            return -1;
        }
        // Open a connection to the right available driver.
        int i;
        UsbSerialDriver driver = availableDrivers.get(0);
        for (i = 0; i < availableDrivers.size(); i++) {
            driver = availableDrivers.get(i);
            UsbDevice udevice = driver.getDevice();
            if ((udevice.getVendorId() == UsbId.VID) && (udevice.getProductId() == UsbId.PID)) {
                PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);//PendingIntent.FLAG_UPDATE_CURRENT
                manager.requestPermission(driver.getDevice(), mPermissionIntent);
                SystemApi.Delay_Api(5000);
                break;
            }
        }
        final UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
        if (connection == null) {
            return -1;
        }
        // Read some data! Most have just one port (port 0).
        port = driver.getPorts().get(0);
        try {
            port.open(connection);
            port.setParameters(38400, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
        } catch (IOException e) {
            Log.d("aabb", "get port");
            connection.close();
            e.printStackTrace();
            return -1;
        }
        return 0;
    }

CdcAcmSerialDriver 用的官方的源码,其内的mControlInterface.getEndpoint(0) 调用看起来也没有错,android.hardware.usb.UsbInterface.getEndpoint 是android sdk内的 看不到源码了,请指教。

img

错误信息已经指明了嘛,endpoint的个数为0

错误明显,打印一下出错的地方,看看 Endpoint 的个数即可

是的 已经解决,最终查出来是设备有问题导致,代码无问题。谢谢各位指教