我需要从后台运行的服务中截取屏幕截图。屏幕截图可以是前景中的应用程序,即使它不是我的应用程序,这就是我无法使用DrawingCache的原因。我四处搜寻,发现了这个
process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0");
InputStream is = process.getInputStream();
但我不知道如何处理流。如何将其添加到位图中?我不需要将它保存到文件中我只需要将其保存在变量中。这适用于有根电话。
非常感谢任何帮助。
答案 0 :(得分:6)
好吧,看来我自己就是这个。到目前为止,这是我发现的,对于那些有类似问题的人。请注意,这因版本而异,我正在运行2.3 Gingerbread。
我在/system/bin
- screencap
和screenshot
中找到了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块中