ホームページ >Java >&#&チュートリアル >Java から「screenrecord」を実行するとビデオ ファイルの作成に失敗するのはなぜですか?
Android からのシェル コマンドの実行: 実行の問題の解決
コマンド「screenrecord --time-limit 10 /sdcard」を実行しようとしたときRuntime.getRuntime().exec() を使用して Java アプリケーションから /MyVideo.mp4" を実行すると、結果のビデオ ファイルの作成に失敗します。この問題は、アプリケーション エミュレータ ターミナルからコマンドを実行すると正常に動作しているにもかかわらず発生します。
この問題の根本的な原因は、Java からコマンドをそのまま実行すると、現在のユーザー ID (UID) がコマンドに割り当てられることにあります。 su コマンドによって付与された昇格された権限を使用するのではなく、その結果、ファイルは作成されません。
解決策: サブプロセス I/O リダイレクト
この問題を解決するには、標準入力をリダイレクトする必要があります。 su プロセスのを実行するコマンドに追加します。これにより、意図した昇格された特権でコマンドが実行されるようになります。
このソリューションを実装する改訂されたコード スニペットは次のとおりです。
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); }
標準入力ストリームである「screenrecord」コマンドをリダイレクトすることにより、は、su プロセスによって付与された昇格された特権の下で効果的に実行され、ファイルの作成が成功します。
以上がJava から「screenrecord」を実行するとビデオ ファイルの作成に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。