Ok, so I have a Android 3.1 tablet (Acer Iconia Tab, which is great by the way) which I can use with Android USB API to connect with a USB Mass Storage Device (a simple USB
Your connection is set up, the end points are basically flags on the device with information on data transfer.
For your stick you need to do something like VV to figure out how many endpoints you have,
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) {
this will let you figure out if the endpoint you're interested in is a bulk (usb constants docs has other types) and if you can send data to or from the device at that endpoint (usb_dir_in to test for in). What endpoint you want is device specific, my example starts on 0, yours will be different
To resave the file you need to do something like
mConnection.bulkTransfer(mEndpointOut, bytes, 512, TIMEOUT);
I have been saving the buffer each time it fills with a file output stream, this is probably inefficient (as I assume bulktransfer is already saving somewhere) but documentation is scarce.
The Android USB host APIs provide only raw USB access. To access files on a memory device, your app must itself implement USB Mass Storage Mode on top of the USB Apis, and then the code of a filesystem on top of that.
A few vendor-customized versions of Android will mount a USB mass storage device with a recognized file system at operation system level, but that is not currently part of standard android. It is also possible that if you have a rooted device you may be able to use that to convince the kernel to mount such a filesystem.