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

Posted

技术标签:

【中文标题】您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?【英文标题】:How do you programmatically take a screenshot on Android ICS and above? 【发布时间】:2012-07-19 11:22:51 【问题描述】:

我正在尝试编写一个在 android 4.0+ 上执行屏幕捕获的应用程序。我知道您很可能必须拥有一部已植根的手机,这很好。

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

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

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

【问题讨论】:

您是否要截取您的应用的屏幕截图? 在这里找到了类似的问题。检查它是否适合您***.com/questions/3582603/… @rrostt 你成功了吗? 【参考方案1】:

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

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

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

在 AOSP 中的标签与您安装的 Android 版本相当(尽管从技术上讲,供应商构建可能具有不同的 adbd 实现屏幕截图功能)。

目前,在 master 中,它正在运行一个名为“screencap”的独立可执行文件,它将数据转储到标准输出。

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

【讨论】:

以上是关于您如何以编程方式在 Android ICS 及更高版本上截取屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式在 Android(KitKat 及更高版本)中添加 APN

如何以编程方式在 Android 的 API 23 及更高版本中获取位置(纬度、经度)?

如何在android Pie及更高版本中以编程方式通过拨号器拨打电话

如何在 android 2.3 及更高版本中获取当前启动器的包名?

如何在 Windows 10 及更高版本中以编程方式刷新任务栏?

如何在 Android 上以编程方式关闭 3G/数据?