传输文件USB大容量存储OTG

我有一个连接到Android设备的外部大容量存储设备。在根目录中,有几个.BIN文件需要读取到我的应用程序中。我能够连接到设备并使用UsbDeviceConnection接收USB许可。

private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String output = outputTV.getText().toString();

String action = intent.getAction();

outputTV.setText(outputTV.getText() + "\n" + " ACTION: " + action);

if (ACTION_USB_PERMISSION.equals(action)) {

synchronized (this) {

UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {

if (device != null) {

if (device.getInterfaceCount() > 0) {

usbIntf = device.getInterface(0);

usbEndIn = usbIntf.getEndpoint(0);

usbEndOut = usbIntf.getEndpoint(1);

usbConnection = mUsbManager.openDevice(device);

usbConnection.claimInterface(usbIntf, true);

byte[] buffer = new byte[usbEndIn.getMaxPacketSize()];

StringBuilder str = new StringBuilder();

int retVal = usbConnection.bulkTransfer(usbEndIn, buffer, usbEndIn.getMaxPacketSize(), 2000);

for (int i = 2; i < buffer.length; i++) {

if (buffer[i] != 0) {

str.append((char) buffer[i]);

}}}}}}}}};

连接后,我可以看到我有一个带有2个批量传输端点的大容量存储接口(一进一出)。

当使用usbConnection.bulkTransfer时,我收到-1返回和一个空缓冲区。因此,我在接收数据时遇到了麻烦。一旦越过障碍,数据将是什么样?如何继续从设备中提取所有文件?有没有一种方法可以将文件逐个文件传输到我的应用程序?有没有更好的方法来解决这个问题?

回答:

好吧,我最终走了一条完全不同的路线。我现在正在使用标准的java.io.File并通过目录结构进行工作。我的代码尚未完善,但这是要点…

private void setupFileIO() {

File storageDir = new File("/storage");

File files[] = storageDir.listFiles();

File directory = null;

if (files != null && files.length > 0) {

for (File f : files) {

if (f.isDirectory() && f.getPath().toLowerCase().contains("usb") && f.canRead()) {

directory = f;

break;

}

}

}

if (directory != null && directory.canRead()) {

File file[] = directory.listFiles();

if (file != null && file.length > 0) {

for (int i = 0; i < file.length; i++) {

String filePath = file[i].getPath();

String extension = Files.getFileExtension(filePath);

if (file[i].isFile() && file[i].canRead() && extension.equalsIgnoreCase("bin")) {

try {

byte[] r = Files.toByteArray(file[i]);

String result = BaseEncoding.base16().encode(r);

// do something with result

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}

以上是 传输文件USB大容量存储OTG 的全部内容, 来源链接: utcz.com/qa/411154.html

回到顶部