Cómo listar archivos en un dispositivo USB OTG

Sé cómo hacer lo siguiente:

  • Escuchar adjuntar y separar eventos de dispositivos usb
  • Obtener todos los dispositivos conectados
  • Obtener permisos para un dispositivo

Así que al final tengo un UsbDevice y tengo permisos para leerlo / escribirlo. ¿Cómo continuar desde aquí?

Puedo abrir el dispositivo y conseguir un FileDescriptor como el siguiente:

  UsbManager manager = (UsbManager) activity.getSystemService(Context.USB_SERVICE); UsbInterface intf = device.getInterface(0); UsbEndpoint endpoint = intf.getEndpoint(0); UsbDeviceConnection connection = manager.openDevice(device); boolean interfaceClaimed = connection.claimInterface(intf, true); int fileDescriptor = connection.getFileDescriptor(); 

¿Cómo puedo trabajar con este FileDescriptor ahora? ¿O de qué otra manera puedo acceder a los archivos en el dispositivo USB?

EDITAR

  • Solución para android <6 : No abra una UsbDeviceConnection e intente encontrar la ruta de los dispositivos usb. Aún así, tiene el problema de distinguir entre varios dispositivos usb y no sabe qué ruta pertenece a qué dispositivo …

  • Solución para android> = 6 : Utilizar el marco de acceso de almacenamiento, en realidad no sé cómo funciona esto …

Porque soy tan stumped como usted es, yo iría la ruta de usar el ls del ls .

Ejemplo de código:

 try { Process process = Runtime.getRuntime().exec("ls /storage/UsbDriveA"); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String listOfFiles = ""; String line; while ((line = buffer.readLine()) != null) { listOfFiles += line; } } catch (InterruptedException e) { e.printStackTrace(); } 

ls devolverá no such file or directory si el punto de montaje es incorrecto.

Aquí hay una lista de muchos de los fabricantes de puntos de montaje que usan:

 /storage/UsbDriveA (all Samsung devices) /storage/USBstorage1 (LG G4, V10, G3, G2, other LG devices) /storage/usbdisk (Moto Maxx, Turbo 2, Moto X Pure, other Motorola devices) /storage/usbotg (Sony Xperia devices, Lenovo Tabs) /storage/UDiskA (Oppo devices) /storage/usb-storage (Acer Iconia Tabs) /storage/usbcard (Dell Venue -- Vanilla Android 4.3 tablet) /storage/usb (HTC One M7, and some Vanilla Android devices) 

(Basado en mi colección de dispositivos y 3 de otras personas, y un viaje rápido a Bestbuy para probar los buques insignia más recientes.Los únicos dispositivos populares que conozco me faltan son los dispositivos Hawuei / Xioami basados ​​en China, que se están volviendo populares en los países ingleses , Pero es probable que utilicen uno de los anteriores.)

Para encontrar el punto de montaje correcto, no escucharía no such file or directory y exec() sentencia exec() con el siguiente punto de montaje.

Una vez hecho todo esto, puede leer fácilmente archivos usando cat /storage/.../file.txt y escribir usando redirección: echo test > /storage/.../file.txt

Espero que esto ayude

  • Cómo detectar que el dispositivo Android está conectado con USB OTG o no mediante programación
  • ¿Cómo puede acceder la aplicación a los archivos de almacenamiento USB OTG en Android 6.0 (API nivel 23) sin root?
  • Reproducir vídeo utilizando USB conectado a través de cable OTG en Android?
  • Uso del teléfono Android como host USB para montar unidades externas en el teléfono y acceder a la memoria de la unidad externa a través del teléfono
  • Comunicación con dispositivo USB serie en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.