Heim >Java >javaLernprogramm >Warum kann beim Ausführen von „screenrecord' aus Java keine Videodatei erstellt werden?

Warum kann beim Ausführen von „screenrecord' aus Java keine Videodatei erstellt werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 06:32:02689Durchsuche

Why Does Executing

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn