web-dev-qa-db-ja.com

android)でUSB大容量ストレージデバイスにアクセスする

だから私はあなたがあなたの電話に差し込むこの小さなケーブルを持っています、それは例えばあなたがここに見ることができるように、あなたがフラッシュドライブに差し込むことができる反対側にUSBポートを持っています:

enter image description here

フラッシュドライブを接続すると、次のような通知が表示されます。

USB大容量ストレージが接続されています

その後、ファイルエクスプローラーアプリを起動すると、ドライブが次の場所にあることがわかります。

/ storage/UsbDriveA /

それはすばらしいことですが、コードでフラッシュドライブにアクセスする方法を知りたいのです。 SDカードへのアクセスは簡単です。

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

しかし、フラッシュドライブの場合、これをどのように行いますか?前もって感謝します! :)

25
user818700

この例では、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" />
9
JBA

私はこれをテストすることはできず、自分でそのようなケーブルを使用することはできませんが、ファイルパスをコンストラクターに直接渡すことができると私は想定しています。

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

これを試しましたか?

3
ballesta25