2016-01-14 1 views
1

В настоящее время у меня есть рабочая реализация, которая позволяет мне перечислять USB-устройства, запрашивать разрешение на это USB-устройство и затем подключаться к ним (в основном от http://developer.android.com/guide/topics/connectivity/usb/host.html). Код, который у меня есть, такой же, как и связанная статья, но ни один из методов в предоставляемых классах не предназначен для перечисления файлов на устройстве или проверки наличия файлов.Списки файлов Android с USB-накопителя

Однако я не понимаю, как я могу перечислить файлы, которые находятся на USB-устройстве, чтобы проверить, существуют ли файлы до передачи данных.

Устройство «путь» расположено по линиям /dev/bus/usb/00x, но к нему нельзя получить доступ непосредственно через File. Я вижу, что приложение ES File Explorer способно отображать файлы на USB-устройстве (без привязки), поэтому я знаю, что это возможно. Я также попытался получить доступ к путям URI, например, usb://100x, так как это казалось ES File Explorer, но мне не повезло.

Я попытался использовать платформу доступа к хранилищу. На вкладке Samsung Galaxy он работает как с SD-картами, так и с USB-устройствами, однако на Google Nexus 10 он не работает ни с одним (он не имеет слота для SD-карты), поэтому я пытаюсь реализовать другой способ поговорить с USB.

Версия Lollipop и выше.

Любые идеи? Благодарю.

+0

Which Android версии ? – greenapps

+0

Отредактированный вопрос с немного более подробной информацией, так как это может быть проблема с планшетами ... но это Lollipop (5.x) – David

+0

Под Lollipop палка с USB-накопителем, насколько я знаю, всегда можно найти в папке, например/mnt/usbdrive,/хранение/0/usbdrive и т. д. Почему бы не использовать это? – greenapps

ответ

0

См. Ссылку this. Каждое запоминающее устройство имеет по меньшей мере один дескриптор интерфейса с кодом класса 08h, который обозначает класс массовой памяти. Класс массовой памяти не определен в дескрипторе устройства! Интерфейс USB имеет ровно два дескриптора конечных точек. Одна конечная точка IN для чтения с устройства и одна конечная точка OUT для записи в устройство2. Чтение и запись в этом случае не обязательно означает чтение или запись на реальном носителе, это описано ниже. Существует два разных типа класса массового хранения. Существует самый распространенный транспортный (BBB) ​​механизм, который является наиболее распространенным. Все новые устройства соответствуют этому стандарту. Тогда есть управление/Bulk/Interrupt (CBI) стандарт, который уже не важно, потому что USB-IF рекомендует использовать подход ВВВ

UsbDevice признан в качестве MassStorage устройства Если:

usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_MASS_STORAGE 
         || usbInterface.getInterfaceSubclass() == INTERFACE_SUBCLASS // int 6 
         || usbInterface.getInterfaceProtocol() == INTERFACE_PROTOCOL // int 80 

и

usbInterface.getEndpointCount() == 2 

, где одна из конечных точек должна удовлетворять следующим:

endPoint direction == 0 
endPoint type = UsbConstants.USB_ENDPOINT_XFER_BULK //int 2