Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Runtime.exec(“screencap”)没有做任何事情(不工作)也没有给出任何错误_Android_Adb_Runtime.exec - Fatal编程技术网

Android Runtime.exec(“screencap”)没有做任何事情(不工作)也没有给出任何错误

Android Runtime.exec(“screencap”)没有做任何事情(不工作)也没有给出任何错误,android,adb,runtime.exec,Android,Adb,Runtime.exec,从命令行运行命令:adb shell screencap/sdcard/image1.png,截图作为“image1.png”保存在库中 但在执行以下操作时,这在语法上不起作用: String[] commandAndArgs = new String[]{ "screencap", "/sdcard/qweqwe. Process p = Runtime.getRuntime().exec(commandAndArgs); 不会引发任何错误或异常 完整代码: @

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

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

final int code=p.waitFor()
如果(代码!=0){
抛出新的运行时异常(“代码:+Code”);
}

另一件事是截图需要android.permission.READ\u FRAME\u BUFFER,这是仅授予系统应用程序(包括ADB shell)的签名权限。请参阅,如果您从应用程序打开shell,它仍会以应用程序的权限运行。如果你的应用程序没有权限,它将无法工作。

你没有权限从应用程序中运行任意内容。如果您想从应用程序中获取屏幕截图,请使用Android 5.0+上的媒体投影API。是否有任何方法提示用户授予该应用程序此权限?但是,如果在获取屏幕截图时请求权限是可以的,请遵循Commonware的评论,改为使用媒体投影API。