您如何以编程方式在 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 及更高版本中获取当前启动器的包名?