首页 > 解决方案 > 我无法获得可在 Android 附件模式连接上读取的剩余字节数

问题描述

我试图获取在 AOA 连接上可用于读取的字节数,但是当我调用available ()方法时,FileInputStream我得到一个 IOException 并显示消息:'ioctl failed: EINVAL (Invalid argument)'

注 1:我使用 JNI 从 C++ 调用 Java 方法

注意2:available()如果我尝试阅读而不是调用方法,它会完美地工作

我究竟做错了什么?在从 AOA 连接上的套接字读取之前,是否有另一种方法来询问可用字节?

这是Java代码:

public int testConnection () throws Exception {
    UsbManager usbManager = (UsbManager) this.context.getSystemService(Context.USB_SERVICE);
    final UsbAccessory[] accessoryList = usbManager.getAccessoryList();
    
    if (accessoryList == null || accessoryList.length == 0) {
        return -1;
    
    } else {
        UsbAccessory usb = accessoryList[0];
    
        try {
            ParcelFileDescriptor fileDescriptor = usbManager.openAccessory(usb);
            
            if (fileDescriptor != null) {
                FileDescriptor fd = fileDescriptor.getFileDescriptor();
                FileInputStream inStream = new FileInputStream(fd);
                
                inStream.available ();
            
            } else {
                return -2;
            }
            
        } catch (IOException e) {  
            return -3;
        
        } catch (Exception e) {
            return -4;
        }
    }

    return 0;
}

标签: javaandroidusbaccessory

解决方案


如果您对该方法执行“Ctrl”+“Clic” available,您将看到该方法不适用于 Android 目标。该工具从裸本机更改并始终返回异常。


推荐阅读