2016-07-14 18 views
1

Wie kann ich adb shell screenrecord auf einem Android Gerät von Java ausführen und die screenrecording beenden?Wie kann ich adb screenrecord auf einem Android-Gerät von Java ausführen und die Bildschirmaufzeichnung beenden?

Momentan muss ich die --time-limit angeben, um die Aufzeichnung zu beenden. Wenn ich versuche, das Video vor der Beendigung aufzunehmen, schlägt es fehl.

Gibt es eine Möglichkeit, ADB zu sagen, die Aufzeichnung zu stoppen? Gibt es eine Möglichkeit, den Thread so zu konfigurieren, dass er einen CTRL-C an den Befehl shell sendet?

Dies ist auf unbewurzelten Telefonen ausgeführt werden.

-Code

videoExecutor.submit(() -> { 
      //Start recording video 
     String recordVideo = "screenrecord --time-limit " + testRun.getVideoLength() + " " + "/sdcard/" + logDate + ".mp4"; 
    try { 
     device.executeShell(recordVideo); 
    } catch (Exception e1) { 
    e1.printStackTrace(); 
    } 
    sleep(testRun.getVideoLength()*ONE_SECOND + TWO_SECONDS); //gotta match the --time-limit above. 

RemoteFile remote = new RemoteFile("/sdcard/" + logDate + ".mp4"); 
File local = new File(videoPath); //Save file to local machine 
      if(!local.getParentFile().exists()) { 
       local.getParentFile().mkdirs(); 
      } 

    try { 
     //Copy video from phone to computer 
     try { 
        device.pull(remote, local); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
    } catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

     }); 

Antwort

1

entweder SIGINT oder SIGHUP-screenrecord Prozess gesendet würde es dazu führen, die Aufnahme zu stoppen.

Ich habe gerade versucht, die folgenden auf unbewurzelten (Lager Android 6.0) Telefon in 2 separaten adb shell Sitzungen:

in Session # 1:

screenrecord /sdcard/Movies/test.mpg 

in Session # 2:

pkill -INT screenrecord 

und screenrecord Capture gestoppt nach Ausgabe der pkill Befehl

+0

Die Telefone sind nicht verwurzelt, also sieht es so aus, als hätten sie keinen Zugriff auf killall. adb shell killall -q = 1 screenrecord/system/bin/sh: killall: nicht gefunden – ALM

+0

Hey Alex, meinst du den Prozess auf dem Server zu töten? Ich sehe es am Telefon töten. Es sieht so aus, als ob die freigeschalteten Android-Telefone keinen Zugriff auf killall oder killall haben, außer ich verpasse etwas? Dank /system/bin/sh: kill: 998: Operation – ALM

+0

Doppel nicht gestattet überprüfen Sie Ihre 'pid' - es sollte keine Berechtigungsprobleme sein, wenn sie unter dem gleichen Benutzer läuft ID –