2012-07-26 87 views
2

我需要从后台运行的服务中截取屏幕截图。屏幕截图可以是前台应用程序,即使它不是我的应用程序,这也是我无法使用DrawingCache的原因。我搜索了一圈,发现这个Android从代码中截取屏幕截图,并以root权限登录

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

但我不知道做什么用的流做。我如何将它变成位图?我不需要将它保存到文件中,我只需要将它保存在一个变量中。这是为了根深蒂固的手机。

任何帮助,非常感谢。

+2

当你有InputStream的你为什么不只是位图MYBITMAP = BitmapFactory.decodeStream(是); ? – 2012-07-26 12:03:04

+0

位图myBitmap = BitmapFactory.decodeStream(is)似乎不起作用,它只是锁定在该行。没有例外只是不会继续。 – Roman 2012-07-28 02:39:23

回答

6

好吧,似乎我自己与这一个。到目前为止,这是我发现的,对于那些有类似问题的人。请注意,这根据版本而异,而且我正在运行2.3姜饼。

我在/system/bin - screencapscreenshot中发现了2个文件。

screencap返回一个格式的位图,我不知道如何解码,同时screenshot使得在SD卡的根目录中称为tmpshot.bmp一个普通bmp文件(无论接受任何形式的命令参数,他们不知道。似乎接受-h,-help,--help等)。

tmpshot.bmp现在似乎是一个可行的解决方案,但我期望避免写入和读取SD卡,因为这是相当的瓶颈。我会继续寻找,但对于那些现在需要解决方案的人来说,在这里。编辑:经过进一步的试验,我发现screencap从另一个ROM(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块