E / S de archivo en un dispositivo de almacenamiento USB montado en modo host USB (Android 3.1 y versiones posteriores)

Ok, por lo que tengo una tableta Android 3.1 (Acer Iconia Tab, que es genial por cierto) que puedo utilizar con Android USB API para conectar con un dispositivo de almacenamiento masivo USB (un simple memory stick USB).

Uso el modo USB Host, busco el dispositivo, obtengo permiso para conectarme (usando BroadcastReceiver). Todo funciona muy bien. El problema es que no sé exactamente qué hacer para copiar un archivo del directorio de almacenamiento externo a la memoria USB.

Esto es lo que tengo hasta ahora:

final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // Got to a point where I should set up connection // I'm setting up a very simple connection, just want some file transfer UsbInterface intf = device.getInterface(0); UsbEndpoint endpoint = intf.getEndpoint(0); UsbDeviceConnection connection = UsbManager.openDevice(device); if (connection.claimInterface(intf, true)) { UtilsAndDialogs.print(getApplicationContext(), "Connected to device"); // Copy file to USB... } else UtilsAndDialogs.print(getApplicationContext(), "Could not connect!"); } } else { UtilsAndDialogs.print(getApplicationContext(), "Permission denied"); Log.d(UtilsAndDialogs.LOG_TAG, "Permission denied for device " + device); } } } }; 

He leído la documentación en el Android Dev (http://developer.android.com/guide/topics/usb/host.html), pero no es muy explícito y he encontrado un buen tutorial (http://www.basic4ppc. Com / forum / basic4android-getting-started-tutorials / 11289-android-usb-host-tutorial-adbtest.html) pero utiliza la comunicación asíncrona.

Sólo quiero saber cómo debo configurar la conexión y utilizar el punto final (no obtuve la parte de punto final, por qué son necesarios) para poder crear un nuevo archivo en el dispositivo de almacenamiento USB y copiar el contenido de un Archivo diferente, probablemente utilizando el método bulkTransfer ().

Cualquier sugerencia o indicación a la documentación más explícita sería muy apreciada.

Gracias

Su conexión está configurada, los puntos finales son básicamente banderas en el dispositivo con información sobre la transferencia de datos.

Para tu palo necesitas hacer algo como VV para averiguar cuántos puntos finales tienes,

 UsbInterface intf = device.getInterface(0); // checks for 2 endpoints if (intf.getEndpointCount() != 2) { Toast toast = Toast.makeText(context, "could not find endpoint", duration); toast.show(); return; } UsbEndpoint ep = intf.getEndpoint(0); if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { if (ep.getDirection() == UsbConstants.USB_DIR_OUT) { 

Esto le permitirá averiguar si el punto final en el que está interesado es un bulk (docs de constantes usb tiene otros tipos) y si puede enviar datos desde o hacia el dispositivo en ese punto final (usb_dir_in para probar en). Qué punto final que desea es específico del dispositivo, mi ejemplo comienza en 0, el suyo será diferente

Para volver a guardar el archivo, necesitas hacer algo como

 mConnection.bulkTransfer(mEndpointOut, bytes, 512, TIMEOUT); 

He estado guardando el búfer cada vez que se llena con un flujo de salida de archivo, esto es probablemente ineficaz (como supongo bulktransfer ya está ahorrando en algún lugar), pero la documentación es escasa.

Las API de host USB de Android proporcionan sólo acceso USB sin procesar. Para acceder a los archivos de un dispositivo de memoria, la aplicación debe implementar el modo de almacenamiento masivo USB encima del Apis USB y, a continuación, el código de un sistema de archivos.

Algunas versiones personalizadas de Android montarán un dispositivo de almacenamiento masivo USB con un sistema de archivos reconocido a nivel del sistema operativo, pero que actualmente no forma parte del androide estándar. También es posible que si tiene un dispositivo con raíz puede utilizarlo para convencer al kernel de montar dicho sistema de archivos.

  • Modo host Android y modo accesorio
  • Aparato de almacenamiento masivo USB Android
  • NullPointerException de UsbManager
  • No se puede depurar Android: este dispositivo no se puede iniciar. (Código 10)
  • Debugging con Android USB en VirtualBox
  • Acceso a los formatos FAT32 y NTFS USB Pendrive de la tableta android
  • Tarjeta SD no disponible mientras está en modo de depuración USB en DroidX
  • Windows se niega a instalar el controlador ADB de Android
  • Mi Macbook Pro no detectará mi samsung galaxy s6
  • Lectura de datos de ratón sin procesar en android
  • Android: BroadcastReceiver cuando inserta / extrae el dispositivo USB en / desde un puerto USB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.