Ausführen von Shell-Befehlen von Android: Beheben des Ausführungsproblems
Beim Versuch, den Befehl „screenrecord --time-limit 10 /sdcard Wenn Sie „/MyVideo.mp4“ aus einer Java-Anwendung mit Runtime.getRuntime().exec() aufrufen, kann die resultierende Videodatei nicht erstellt werden. Dies tritt auf, obwohl der Befehl erfolgreich funktioniert, wenn er vom Anwendungsemulator-Terminal ausgeführt wird.
Die Hauptursache für dieses Problem liegt in der Tatsache, dass bei der Ausführung des Befehls in Java dem Befehl die aktuelle Benutzer-ID (UID) zugewiesen wird , anstatt die durch den Befehl su gewährten erhöhten Berechtigungen zu verwenden. Infolgedessen wird die Datei nicht erstellt.
Lösung: Unterprozess-E/A-Umleitung
Um dieses Problem zu beheben, ist es notwendig, die Standardeingabe umzuleiten des su-Prozesses an den auszuführenden Befehl an. Dadurch wird sichergestellt, dass der Befehl mit den vorgesehenen erhöhten Berechtigungen ausgeführt wird.
Hier ist ein überarbeiteter Codeausschnitt, der diese Lösung implementiert:
try { Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("screenrecord --time-limit 10 /sdcard/MyVideo.mp4\n"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); } catch (IOException e) { throw new Exception(e); } catch (InterruptedException e) { throw new Exception(e); }
Durch Umleitung des Standardeingabestreams, des Befehls „screenrecord“. wird effektiv unter den vom su-Prozess gewährten erhöhten Berechtigungen ausgeführt, was zu einer erfolgreichen Dateierstellung führt.
Das obige ist der detaillierte Inhalt vonWarum kann beim Ausführen von „screenrecord' aus Java keine Videodatei erstellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!