首页 > 解决方案 > Android Runtime.exec(“screencap”)没有做任何事情(不工作)并且没有给出任何错误

问题描述

运行命令: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));
    }
}

标签: androidadbruntime.exec

解决方案


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

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

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


推荐阅读