如何列出USB OTG设备上的文件

时间:2016-01-29 16:34:24

标签: android usb usb-otg

我知道怎么做:

  • 听取附加和分离usb设备的事件
  • 获取所有连接的设备
  • 获取设备的权限

所以最后我有一个UsbDevice,我有权读/写它。怎么从这里继续?

我可以打开设备并获得FileDescriptor如下:

 UsbManager manager = (UsbManager) activity.getSystemService(Context.USB_SERVICE);
 UsbInterface intf = device.getInterface(0);
 UsbEndpoint endpoint = intf.getEndpoint(0);
 UsbDeviceConnection connection = manager.openDevice(device);
 boolean interfaceClaimed = connection.claimInterface(intf, true);
 int fileDescriptor = connection.getFileDescriptor();

我现在如何使用此FileDescriptor?或者我如何才能访问USB设备上的文件?

修改

  • Android的解决方案< 6 :不要打开UsbDeviceConnection并尝试查找USB设备路径。然而,你有问题要区分多个USB设备,不知道哪个路径属于哪个设备......

  • Android的解决方案> = 6 :使用存储访问框架,实际上我不知道它是如何工作的......

1 个答案:

答案 0 :(得分:3)

因为我和你一样难过,所以我会选择使用ls命令。

代码示例:

try {
    Process process = Runtime.getRuntime().exec("ls /storage/UsbDriveA");
    BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String listOfFiles = "";
    String line;
    while ((line = buffer.readLine()) != null) {
      listOfFiles += line;
    }
} catch (InterruptedException e) {
    e.printStackTrace();
}
如果挂载点不正确,

ls将返回no such file or directory

以下列出了许多制造商使用的挂载点:

/storage/UsbDriveA     (all Samsung devices)
/storage/USBstorage1   (LG G4, V10, G3, G2, other LG devices)
/storage/usbdisk       (Moto Maxx, Turbo 2, Moto X Pure, other Motorola devices)
/storage/usbotg        (Sony Xperia devices, Lenovo Tabs)
/storage/UDiskA        (Oppo devices)
/storage/usb-storage   (Acer Iconia Tabs)
/storage/usbcard       (Dell Venue -- Vanilla Android 4.3 tablet)
/storage/usb           (HTC One M7, and some Vanilla Android devices)

(基于我的设备和其他3个人的集合,以及快速前往Bestbuy测试最新的旗舰店。我知道我唯一缺少的流行设备是Hawuei / Xioami设备中国在英国国家越来越受欢迎,但可能会使用上述其中一种。)

要找到正确的挂载点,您将监听no such file or directory并使用下一个挂载点循环/重新执行exec()语句。

完成所有操作后,您可以使用cat /storage/.../file.txt轻松读取文件并使用重定向进行编写:echo test > /storage/.../file.txt

希望这有帮助