首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传输文件USB海量存储OTG

传输文件USB海量存储OTG
EN

Stack Overflow用户
提问于 2015-07-29 21:37:54
回答 1查看 3.8K关注 0票数 1

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

代码语言:javascript
复制
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]);
                            }}}}}}}}};

一旦我连接,我就可以看到我有一个大容量存储接口和两个大容量传输端点(一个在,一个退出)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 19:33:10

我最终用这个走了一条完全不同的路。我现在正在使用标准的java.io.File,并按我的方式完成目录结构。我的代码还没有完善,但这是它的要点.

代码语言:javascript
复制
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();
                    }
                }
            }
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31711621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档