Transfer Files USB-Massenspeicher OTG
Ich habe ein externes Massenspeichergerät an ein Android-Gerät angeschlossen. Es gibt mehrere .BIN-Dateien im Stammverzeichnis, die ich in meine App einlesen muss. Ich kann über UsbDeviceConnection eine Verbindung zum Gerät herstellen und eine USB-Berechtigung erhalten.
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]);
}}}}}}}}};
Nachdem ich verbunden bin, kann ich feststellen, dass ich eine Massenspeicher-Schnittstelle mit 2 Bulk-Transfer-Endpunkten habe (einer in, einer out).
Bei der Verwendung von usbConnection.bulkTransfer erhalte ich -1 zurück und einen leeren Puffer. Daher habe ich Probleme beim Empfangen von Daten. Wie sehen die Daten nach dieser Hürde aus? Wie rufe ich weiterhin alle Dateien vom Gerät ab? Gibt es eine Möglichkeit, die Daten Datei für Datei auf meine App zu übertragen? Gibt es eine insgesamt bessere Herangehensweise?