从 Android 执行 Shell 命令:解决执行问题
尝试执行命令“screenrecord --time-limit 10 /sdcard”时/MyVideo.mp4”从使用 Runtime.getRuntime().exec() 的 Java 应用程序中,生成的视频文件无法获取创建的。尽管从应用程序模拟器终端运行该命令成功运行,但仍会发生这种情况。
此问题的根本原因在于,按原样从 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中文网其他相关文章!