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 - screencapscreenshot 中找到了 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上通过降低音量和电源键来截取屏幕截图?

Xamarin - 在android中截取屏幕截图

以编程方式从服务中截取屏幕截图

您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?

如何在 Android 上以编程方式截取屏幕截图? [复制]

android中怎么用代码实现截屏