Android 从代码中截取屏幕截图,具有 root 访问权限
Posted
技术标签:
【中文标题】Android 从代码中截取屏幕截图,具有 root 访问权限【英文标题】:Android take screenshot from code, with root access 【发布时间】:2012-07-26 11:56:45 【问题描述】:我需要从后台运行的服务中截取屏幕截图。屏幕截图可以是前台应用程序的截图,即使它不是我的应用程序,这就是我不能使用 DrawingCache 的原因。我四处寻找,发现了这个
process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
InputStream is = process.getInputStream();
但我不知道如何处理流。如何将其放入位图中?我不需要将其保存到文件中,只需将其保存在变量中即可。这是针对有根手机的。
非常感谢任何帮助。
【问题讨论】:
当你有输入流时,你为什么不只是 Bitmap myBitmap = BitmapFactory.decodeStream(is); ? Bitmap myBitmap = BitmapFactory.decodeStream(is) 似乎不起作用,它只是锁定在该行。没有例外就是不继续。 【参考方案1】:好吧,看来我只能靠自己了。到目前为止,这是我发现的,对于那些有类似问题的人。请注意,这因版本而异,我运行的是 2.3 Gingerbread。
我在 /system/bin
- screencap
和 screenshot
中找到了 2 个文件。
screencap
以我不知道如何解码的格式返回位图,而screenshot
在 sdcard 的根目录生成一个名为 tmpshot.bmp 的常规 bmp 文件(不接受任何类型的命令参数。它们似乎也不接受 -h,-help, --help 等)。
tmpshot.bmp 目前似乎是一个可行的解决方案,但我希望避免从 sdcard 写入和读取,因为这是相当大的瓶颈。我会继续寻找,但对于那些现在需要解决方案的人来说,这里就是。
编辑:经过进一步试验,我发现来自另一个 rom 的 screencap
二进制文件(具体来说是 MIUI)实际上提供了更多选项,其中 (miui)screencap -t png /sdcard/screen.png
产生了一个有效的 png 屏幕截图。
【讨论】:
【参考方案2】:试试这个
Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();
把它放在一个 try catch 块中
【讨论】:
以上是关于Android 从代码中截取屏幕截图,具有 root 访问权限的主要内容,如果未能解决你的问题,请参考以下文章
您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?