1

我正在尝试将安卓手机连接到 USB 设备,以便从设备中读取文件。手机有 USB 主机 (Galaxy S4),我使用的是 USB OTG 电缆。我注意到当我连接拇指驱动器时,设备变得可见,我可以在 Astro 文件管理器中浏览它的文件。我还可以通过编程方式访问其内容:

File f = new File("/storage/UsbDriveA/");
String[] files = f.list();
for (String s : files) {
    logger.d("File name: " + s);
}

但是,对于其他 USB 设备,我无法在 Astro 文件管理器中看到它或以编程方式访问它。我使用 USB Device Info 来比较两个 USB 设备的配置文件。两者都是大容量存储设备并具有相似的配置文件。以下是比较两个配置文件的几个屏幕截图:

拇指驱动器的 USB 配置文件

其他设备的 USB 配置文件

此外,在使用 UsbManager 的 getDeviceList 时,这两个设备都是可见的。但是,我不知道 UsbDeviceCommunication 是否是我正在寻找的。它用于发送和接收消息,而我只需要抓取一个文件。

所以,我有两个问题:

  1. 导致拇指驱动器可访问而另一个被隐藏的两个 USB 设备有什么不同?

  2. 我是否正确认为 UsbDeviceCommunication 不是我想要的?如果是,我如何使用它来读取特定文件?

4

1 回答 1

0

更新

正如 Chris Stratton 在评论中指出的那样,这个问题与 OTG 无关。我试图读取的设备是 FAT12 文件系统,该手机不支持该设备。


好吧,在与生产我试图连接的设备的公司的工程师联系后,我终于有了答案。USB OTG 是 USB 协议的扩展。如果设备不支持 OTG 扩展(此特定设备不支持)并且 Android 上的 USB 大容量存储驱动程序需要这些扩展,则主机将无法成功枚举 USB 设备。

于 2013-12-05T02:11:20.547 回答