Desktop Java App kopieren und Android-Daten über USB übertragen

Ich habe eine Desktop-Java-App und auch eine Android-App. Zwei Apps arbeiten zusammen.

Der Benutzer in der Desktop-App hat eine Schaltfläche zum Starten der Übertragung zwischen Gerätedaten-App und Computer-App und umgekehrt.

So muss ich Daten mit einem einfachen USB-Kabel und ohne Internetverbindung / WiFi / Bluetooth / adb übertragen.

Ich habe zwei Java-MTP-Bibliotheken gefunden, die unter Windows funktionieren, um mein Problem zu lösen, und die USB-Host- / Zubehörfunktion von Android:

jMTP erkennt erfolgreich meine Android-Geräte, Ordner und andere Dinge

Ich habe Erfolg beim Übertragen einer Datei in Computer ---> Gerät, aber ich habe einen Fehler, wenn ich versuche, eine Datei in Gerät ---> Computer zu übertragen.

Ich habe meinen Code nach der Erklärung eingefügt.

jusbpmp aber ich habe nicht die Möglichkeit, Gerät zu übertragen ---> Computer.

USB Host / Zubehör nicht nützlich, da die Übertragung von der Desktop-App gestartet wird und wenn ich auf der Android-Entwicklerhandbuch-Website lese, scheint es nicht mit dem übereinzustimmen, was ich brauche, oder wenn der Benutzer die Übertragung vom Gerät startet.

Ich versuche von 1 Woche bis zum Erfolg in dieser Aufgabe, aber es scheint, dass ich Hilfe brauche.

Java + jMTP-Code

private static void jMTPeMethode() 
        {
            PortableDeviceManager manager = new PortableDeviceManager();
            PortableDevice device = manager.getDevices()[0];
            // Connect to USB tablet
            device.open();

            System.out.println(device.getModel());

            System.out.println("---------------");

            // Iterate over deviceObjects
            for (PortableDeviceObject object : device.getRootObjects()) 
            {
                // If the object is a storage object
                if (object instanceof PortableDeviceStorageObject) 
                {
                    PortableDeviceStorageObject storage = (PortableDeviceStorageObject) object;

                    for (PortableDeviceObject o2 : storage.getChildObjects()) 
                    {
                        if(o2.getOriginalFileName().equalsIgnoreCase("Test"))
                        {

                            //Device to computer not working
                            PortableDeviceToHostImpl32 copy = new PortableDeviceToHostImpl32();
                            try 
                            {
                                copy.copyFromPortableDeviceToHost(o2.getID(), "C:\\TransferTest", device);
                            } catch (COMException ex) 
                            {

                            }

    //                      //Host to Device working
    //                      BigInteger bigInteger1 = new BigInteger("123456789");
    //                      File file = new File("c:/GettingJMTP.pdf");
    //                      try {
    //                          storage.addAudioObject(file, "jj", "jj", bigInteger1);
    //                      } catch (Exception e) {
    //                          //System.out.println("Exception e = " + e);
    //                      }
                        }
                        System.out.println(o2.getOriginalFileName());
                    }
                }
            }

            manager.getDevices()[0].close();
        }

Dies ist das Ergebnis des Codes und des Fehlers

`

    Nexus 9
    ---------------
    Music
    Podcasts
    Ringtones
    Alarms
    Notifications
    Pictures
    Movies
    Download
    DCIM
    Android
    ! Failed to get IStream (representing object data on the device) from IPortableDeviceResources, hr = 0x80070057
    test
    ReleveData

`

Ich lese im Internet 0x80070057 ist eine generische Windows-Ausnahme.

Bearbeiten

Windows-Site sagt für den hr-Fehler ERROR_INVALID_PARAMETER 0x80070057: Der von der Anwendung angegebene Parameter ist ungültig.

Aber ich sehe nicht, dass der Parameter nicht gültig ist

Hier ist dasVerknüpfun der Klasse C der Bibliothek, die zum Übertragen des Datengeräts auf den Computer verwendet wird, wird meine Fehlerzeile 230 angezeigt.

Und dies ist die von mir verwendete jMTP-Bibliothek.

Können Sie mir helfen oder auf andere Weise das tun, was ich brauche (Usb4Java, libUSB)? Ich werde wirklich dankbar sein.

Vielen Dank im Voraus.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage