2

我需要从后台运行的服务中截取屏幕截图。屏幕截图可以是前台应用程序的截图,即使它不是我的应用程序,这就是我不能使用 DrawingCache 的原因。我四处寻找,发现了这个

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0"); InputStream is = process.getInputStream();

但我不知道如何处理流。如何将其放入位图中?我不需要将其保存到文件中,只需将其保存在变量中即可。这适用于有根电话。

任何帮助深表感谢。

4

2 回答 2

6

好吧,看来我独自一人。到目前为止,对于那些有类似问题的人来说,这就是我发现的。请注意,这因版本而异,我正在运行 2.3 Gingerbread。

我在/system/bin-screencapscreenshot.

screencap以我不知道如何解码的格式返回位图,同时screenshot在 sdcard 的根目录创建一个名为 tmpshot.bmp 的常规 bmp 文件(不接受任何类型的命令参数。他们似乎不接受 -h, -help,--help 等)。

tmpshot.bmp 目前似乎是一个可行的解决方案,但我希望避免从 sdcard 写入和读取,因为这是相当大的瓶颈。我会继续寻找,但对于那些现在需要解决方案的人来说,这里有。

编辑:经过进一步的试验,我发现screencap来自另一个 rom 的二进制文件(具体来说是 MIUI)实际上提供了更多选项,其中 (miui)screencap -t png /sdcard/screen.png产生了一个有效的 png 屏幕截图。

于 2012-07-28T18:11:12.650 回答
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 块中

于 2013-03-04T12:26:38.180 回答