【问题标题】:Android Runtime.exec ("screencap") not doing anything (not working) and not giving any errorAndroid Runtime.exec(“screencap”)没有做任何事情(不工作)并且没有给出任何错误
【发布时间】:2020-11-14 21:50:44
【问题描述】:

从命令行运行命令:adb shell screencap /sdcard/image1.png 有效,截取屏幕截图并保存在图库中为“image1.png”

但这在语法上不起作用:

String[] commandAndArgs = new String[]{ "screencap", "/sdcard/qweqwe.
Process p = Runtime.getRuntime().exec(commandAndArgs);

不会抛出任何错误或异常

完整代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try{
        String[] commandAndArgs = new String[]{ "screencap", "/sdcard/qweqwe.png" };
        Process p = Runtime.getRuntime().exec(commandAndArgs);

        String error = "error: ";
        Scanner scanner = new Scanner(p.getInputStream());
        while (scanner.hasNext()) {
            error += scanner.nextLine();
        }

        Toast.makeText(this, error, Toast.LENGTH_LONG).show();
    }catch (Exception e){
        Log.e("err", Log.getStackTraceString(e));
    }
}

【问题讨论】:

  • 您无权在应用程序中运行任意内容。如果您想从应用中截取屏幕截图,请在 Android 5.0+ 上使用媒体投影 API。

标签: android adb runtime.exec


【解决方案1】:

您必须检查进程的退出代码是否等于零,这表明成功。

final int code = p.waitFor()
if (code != 0) {
    throw new RuntimeException("Code: " + code);
}

另外,截图需要android.permission.READ_FRAME_BUFFER,这是一个签名权限,只授予系统应用(包括ADB shell)。看,如果您从您的应用程序中打开一个 shell,它仍然以您的应用程序的权限运行。如果您的应用没有权限,它将无法运行。

【讨论】:

  • 有没有办法提示用户给应用这个权限?
  • 但是,如果在截屏时请求许可可以,请按照 CommonsWare 的评论并改用 Media Projection API。
猜你喜欢
  • 2021-02-24
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2016-10-02
  • 2013-09-28
相关资源
最近更新 更多