Android从代码中截取屏幕截图,具有root访问权限

时间:2012-07-26 11:56:46

标签: java android screenshot framebuffer

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

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

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

我在/system/bin - screencapscreenshot中找到了2个文件。

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

tmpshot.bmp现在似乎是一个可行的解决方案,但我希望避免从SD卡写入和读取,因为这是一个瓶颈。我会一直在寻找,但对于那些现在需要解决方案的人来说,就在这里。

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

答案 1 :(得分: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块中