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。