android - Android 上外接显示器的屏幕截图?

标签 android android-sdk-tools

Android 应用程序,通过 Presentation 类和相关设施,可以在外部显示器(HDMI、MHL、Miracast 等)上显示单独的内容,而不是在手机或平板电脑自己的触摸屏上(我什么'将在这里称为“主显示器”。

对于主显示,我们可以使用screencap或者DDMS来截屏。

有没有办法做外接显示器的截图?

理想情况下,这将是一种类似于 screencap/DDMS 的解决方案,无需修改应用程序。但是,涉及以某种方式复制表示外部显示器的 Window 内容的解决方案也很有趣。

最佳答案

没有用于捕获外部显示器的操作系统功能。

主显示器由多个来源合成,外部显示器也是如此。 “截屏”功能实际上只是合成各种来源的另一种方式。因为它使用与主显示器相同的参数,所以您会得到相同的输出。 (请注意,任何“安全”层,例如受 DRM 保护的视频,都不会出现。)因此,要“捕获”外部显示器,您需要一个使用外部显示器“层堆栈”而不是主要的,并且没有这样做的 API。

(参见 SurfaceFlinger.cpp 中的 SurfaceFlinger::captureScreenImplLocked()。)

screenrecord 命令做类似的事情:它使用主显示器的层堆栈创建一个虚拟显示器,并捕获在那里呈现的任何内容。

就捕获 Presentation 的输出而言,有几个可能感兴趣的 CTS 测试。 VirtualDisplayTest创建一个 Presentation 并使用 ImageReader 捕获它, 而 EncodeVirtualDisplayTest通过完整的视频编码/解码路径提供演示文稿。测试只是绘制一系列颜色,然后检查以确保可以读回这些颜色。这两者都需要最新版本的 Android(例如 ImageReader 直到 API 19 才存在),并且应用的有限权限会将输出限制为应用本身呈现的内容。

关于android - Android 上外接显示器的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26941104/

相关文章:

android - 查看数学运算的结果

java - 从任何地方访问 View 而不使用静态声明

java - 如何修复底部按钮上的软键盘重叠?

java - 如何清理 Rx Subscription 和 Observable 以防止内存泄漏?

android - 没有这样的文件或目录,无法构建Android项目

Android SDK 文件夹占用大量磁盘空间。我们是否需要保留所有系统镜像?

android - 请确保文件 "kernel-ranchu"与您的系统镜像位于同一位置

java - 如何以编程方式读取apk文件的内容?

android - 根据输入调出句子

adb:在 Mac OS X Yosemite 上找不到命令(来自 platform-tools 目录中)