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

时间:2012-07-19 11:22:51

标签: android screen screenshot capture

我正在尝试编写一个在Android 4.0+上执行屏幕捕获的应用程序。我知道你很可能必须有一个根电话,这很好。

我试过从/ dev / graphics / fb0抓取数据。它可以工作,但它只能获得启动屏幕。 (HTC One X)我猜测,因为ICS完全通过加速渲染,它在启动后不会渲染到帧缓冲区。

虽然网上有关此问题的信息有限,但已有一些建议。一种是使用Android-Screenshot-Library。它不起作用(它从/ dev / fb0获取帧缓冲区内容)。其他建议仅用于捕获您自己的应用程序屏幕。我想捕获用户正在做的事情(这是用于研究并且没有恶意意图。)

到目前为止,我被困住了,所以欢迎任何想法或建议。

1 个答案:

答案 0 :(得分:1)

直接帧缓冲访问需要特定于设备的知识,并且经常更改图形引擎的模式,因此不建议这样做。

更好的答案是检查adbd对您的特定版本的作用。参见

android / platform / system / core / adb / framebuffer_service.c

在AOSP中的标签与您安装的Android版本相当(虽然从技术上讲,供应商构建可能会对屏幕截图功能产生不同的影响)。

目前,在master中,它正在运行一个名为'screencap'的独立可执行文件,它将数据转储到stdout。

您可能需要以 graphics 组中的用户身份运行它,即root或adb的 shell 用户ID。