Подтвердить что ты не робот

Получить доступ к USB-накопителю в Android

Итак, у меня есть этот маленький кабель, который вы подключаете к своему телефону с USB-портом на другой стороне, где вы можете подключить флэш-диск, например, как вы можете здесь:

enter image description here

Когда я подключаю флешку, я получаю уведомление, в котором говорится:

Подключено запоминающее устройство USB

Когда я запускаю приложение для проводника файлов, я вижу, что диск затем находится по адресу:

/хранение/UsbDriveA/

И это здорово, но я хочу знать, как получить доступ к флеш-накопителю в моем коде. Получение доступа к SD-карте достаточно просто:

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

Но как бы вы это сделали в случае флеш-накопителя? Заранее спасибо!:)

4b9b3361

Ответ 1

В этом примере я использую FileUtils из Apache, но без него вы увидите логику, используемую для чтения флэш-накопителя 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" />

Ответ 2

Я не могу проверить это, не имея такого кабеля самостоятельно, но мое предположение состояло в том, что вы можете передать свой путь к файлу напрямую в конструктор, который будет выглядеть следующим образом:

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

Вы пробовали это?