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

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

Введите описание изображения здесь

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

Подключение USB-накопителя

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

/ Хранение / UsbDriveA /

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

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

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

В этом примере я использую 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" /> 

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

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

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

Intereting Posts
Создание видео с изображениями и аудио в Android Почему менеджер загрузки требует «WRITE_EXTERNAL_STORAGE» для maxSdkVersion> 18 Поиск раскрывающегося списка в веб-обозревателе Android, который работает Android Dynamic Array ListPreference Длительная операция загрузки при открытии xml-макета на последнем ADT Ошибка при создании apk – «Несколько файлов dex определяют Lcom / google / ads / Ad» Невозможно разрешить символ ACCESS_FINE_LOCATION Предложите работать вместе с совместным проектом ViewRootImpl.setPausedForTransition (boolean) NullPointerException в ActivityTransitionCoordinator при переходе на другую активность, вызванную слишком рано Android Bitmap для Base64 String Колыбель кинжала: игнорировать по упаковке Android M – проверить разрешение времени выполнения – как определить, проверен ли пользователь «Никогда не спрашивать снова»? Планировщик заданий не работает в пределах заданного интервала Производительность ORM: greenDAO быстрее ORMLite? Как уменьшить разрыв между значком навигации и заголовком панели?