android - 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));
}
}
解决方案
您必须检查进程的退出代码是否等于零,这表示成功。
final int code = p.waitFor()
if (code != 0) {
throw new RuntimeException("Code: " + code);
}
另一件事是截图需要android.permission.READ_FRAME_BUFFER
,这是仅授予系统应用程序(包括 ADB shell)的签名权限。看,如果您从您的应用程序中打开一个 shell,它仍然以您的应用程序的权限运行。如果您的应用没有权限,它将无法运行。
推荐阅读
- angular - 我如何绕过 xss 的角度
- python - 如何从网络 pc 获取 xlsx 以将其与 openpyxl 一起使用?
- intro.js - 我们如何在 intro.js 的工具提示正文中加载 Ajax 内容?
- c# - ASP.Net Core 中的全局异常处理程序(非 UI)
- postgresql - Postgres-“错误:生成表达式不是不可变的”为什么我的表达式不是不可变的?
- python - 使用来自 VS Code e Kaggle 的路径文件夹得到不同的结果
- python - 可停止多线程中的多处理
- google-play-console - 我被困在谷歌验证过程中,可以看到在谷歌播放开发者控制台上找不到上传选项
- python - 在 Pytorch 中压缩张量的最快方法
- javascript - 如何在 React 中实现自定义组件?