在android中访问USB大容量存储设备

所以我有这个小插头插入你的手机,在另一端有一个USB端口,你可以插入一个闪存驱动器,例如,你可以看到这里:

在这里输入图像说明

当我插入一个闪存驱动器时,我收到一个通知,说:

USB大容量存储连接

当我然后启动一个文件浏览器应用程序,我可以看到,驱动器然后位于:

/存储/ UsbDriveA /

这很好,但我想知道如何访问我的代码中的闪存驱动器。 访问SD卡很容易:

File sdCard = Environment.getExternalStorageDirectory(); File directory = new File (sdCard.getAbsolutePath() + "/MyFiles") directory.mkdirs(); 

但是,如何在闪存驱动器的情况下做到这一点? 提前致谢! 🙂

Solutions Collecting From Web of "在android中访问USB大容量存储设备"

在这个例子中,我使用了Apache的FileUtils,但没有它的事件你会看到用于读取USB闪存驱动器的逻辑:

 private UsbManager usbManager; private UsbDevice clef; ArrayList<File> images; usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); clef = null; if (usbManager != null) { HashMap<String,UsbDevice> deviceList = usbManager.getDeviceList(); if (deviceList != null) { Iterator<UsbDevice> deviceIterator = deviceList.values().iterator(); while (deviceIterator.hasNext()) { clef = deviceIterator.next(); } } } if (clef != null) { File directory = new File("/storage/UsbDriveA/"); if (directory != null) { if (directory.canRead()) { images = new ArrayList<File>(); String[] imageExtensions = {"jpg","jpeg","png","gif","JPG","JPEG","PNG","GIF"}; Iterator<File> iterateImages = FileUtils.iterateFiles(directory, imageExtensions, true); while (iterateImages.hasNext()) { File theImage = iterateImages.next(); if (!theImage.getName().startsWith(".", 0)) images.add(theImage); } // custom process / methods... not very relevant here : imageIndex = 0; scale = 1.0f; countImgs = images.size(); loadImage(imageIndex); } } } 

在我的清单中,我有这些线,虽然我不确定他们都是强制性的…

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.USB_PERMISSION" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

我不能testing这个,我自己也没有这样的电缆,但我的假设是你可以直接将你的文件path传递给构造函数,如下所示:

 File directory = new File("/storage/UsbDriveA/"); 

你尝试过吗?