我目前有一个工作实现,允许我列出USB设备,请求该USB设备的权限,然后连接到它们(主要来自http://developer.android.com/guide/topics/connectivity/usb/host.html)。我所拥有的代码与链接文章相同,但所提供类的方法都不是用于列出设备上的文件或检查文件是否存在。
但是我不明白如何在传输数据之前列出USB设备上的文件以检查文件是否存在。
设备"路径"是File
的行,但不能直接通过ES File Explorer
访问。我看到应用usb://100x
能够列出USB(非root设备)上的文件,所以我知道它是可能的。我也尝试访问像{ type : string } & T
这样的URI路径,因为ES文件浏览器似乎正在这样做,但我没有运气。
我尝试过使用Storage Access Framework。在三星Galaxy Tab上它可以同时使用SD卡和USB,但是在谷歌Nexus 10上它不兼容(它没有SD卡插槽)所以我试图用另一种方式与USB通信
版本是Lollipop及以上版本。
有什么想法吗?感谢。
答案 0 :(得分:0)
请参阅this链接。 每个大容量存储设备至少有一个接口描述符,其类代码为08h,代表大容量存储类。大容量存储类未在设备描述符中定义! USB接口只有两个端点描述符。一个IN端点从设备读取,一个OUT端点写入设备2。在这种情况下的读取和写入不一定意味着在实际存储介质上读取或写入,这将在后面描述。关于大容量存储类有两种不同的类型。存在大量传输(BBB)机制是最常见的传输机制。所有较新的设备都遵循该标准。然后是控制/批量/中断(CBI)标准,它不再重要,因为USB-IF建议使用BBB方法
UsbDevice被认为是massStorage Device If:
usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_MASS_STORAGE
|| usbInterface.getInterfaceSubclass() == INTERFACE_SUBCLASS // int 6
|| usbInterface.getInterfaceProtocol() == INTERFACE_PROTOCOL // int 80
和
usbInterface.getEndpointCount() == 2
其中一个端点必须满足以下条件:
endPoint direction == 0
endPoint type = UsbConstants.USB_ENDPOINT_XFER_BULK //int 2