我知道如何做以下事项:
>听取附加和分离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:使用存储访问框架,实际上我不知道它是如何工作的……
最佳答案
因为我和你一样难过,所以我会选择使用ls命令.
原文链接:https://www.f2er.com/android/429932.html代码示例:
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将不返回此类文件或目录.
以下是制造商使用的许多安装点的列表:
/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设备,这些设备在英国国家越来越受欢迎,但可能他们使用上述之一.)
要找到正确的挂载点,您将不会侦听此类文件或目录,并使用下一个挂载点循环/重新执行exec()语句.
完成所有操作后,您可以使用cat /storage/…/file.txt轻松读取文件,并使用重定向进行写入:echo test> /storage/…/file.txt
希望这可以帮助