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í?
- No se detecta el dispositivo USB de modo host - ¿Qué archivos son exactamente necesarios?
- Android USB OTG: por programación, apague la alimentación del puerto
- ¿Cómo instalar apk directamente en la memoria USB OTG?
- Android lectura / escritura de archivos en la unidad USB OTG programatically
- Dibujando potencia desde el dispositivo USB a la tableta de Android a través del cable OTG
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 …
- USB OTG teléfonos compatibles?
- Ruta de acceso de OTG en dispositivo Android
- ¿Cómo leer / escribir almacenamiento externo USB en Android?
- Información externa del hardware
- Envío de datos desde un PC a un dispositivo Android mediante USB OTG
- Depuración Reaccionar Nativo sobre adb tcpip
- Lectura de datos de ratón sin procesar en android
- ¿Cómo detectar si Android tiene soporte USB completo o no?
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
- Recuperando onBindViewHolder al desplazarse por la vista Recycler
- GooglePlay dice que el dispositivo no es compatible, pero la consola de los desarrolladores lo muestra como un dispositivo compatible.