Transferir archivos de almacenamiento masivo USB OTG
Tengo un dispositivo de almacenamiento masivo externo conectado a un dispositivo Android. Hay varios archivos .BIN en el directorio raíz que necesito leer en mi aplicación. Puedo conectarme al dispositivo y recibir permiso del usb usando UsbDeviceConnection.
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String output = outputTV.getText().toString();
String action = intent.getAction();
outputTV.setText(outputTV.getText() + "\n" + " ACTION: " + action);
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) {
if (device.getInterfaceCount() > 0) {
usbIntf = device.getInterface(0);
usbEndIn = usbIntf.getEndpoint(0);
usbEndOut = usbIntf.getEndpoint(1);
usbConnection = mUsbManager.openDevice(device);
usbConnection.claimInterface(usbIntf, true);
byte[] buffer = new byte[usbEndIn.getMaxPacketSize()];
StringBuilder str = new StringBuilder();
int retVal = usbConnection.bulkTransfer(usbEndIn, buffer, usbEndIn.getMaxPacketSize(), 2000);
for (int i = 2; i < buffer.length; i++) {
if (buffer[i] != 0) {
str.append((char) buffer[i]);
}}}}}}}}};
Una vez que estoy conectado, puedo ver que tengo una interfaz de almacenamiento masivo con 2 puntos finales de transferencia masiva (uno de entrada, uno de salida).
Cuando uso usbConnection.bulkTransfer, recibo -1 y un búfer vacío. Entonces, tengo problemas para recibir datos. Una vez pasado ese obstáculo, ¿cómo serán los datos? ¿Cómo continúo extrayendo todos los archivos del dispositivo? ¿Hay alguna manera de transferir el archivo de datos por archivo a mi aplicación? ¿Existe una mejor forma de abordar esto?