Android上外部显示器的屏幕截图?

时间:2014-11-15 00:31:47

标签: android android-sdk-tools

Android应用程序,通过Presentation课程和相关设施,可以在外部显示器(HDMI,MHL,Miracast等)上显示与手机或平板电脑自带的触摸屏上分开的内容(什么我打电话给"主要显示器"在这里。

对于主要显示,我们可以使用screencap或DDMS进行屏幕截图。

有没有办法制作外部显示器的屏幕截图?

理想情况下,它可以使用类似于screencap / DDMS的解决方案,不需要修改应用程序。但是,以某种方式复制代表外部显示的Window内容的解决方案也会很有趣。

1 个答案:

答案 0 :(得分:10)

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

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

(请参阅SurfaceFlinger.cpp中的SurfaceFlinger::captureScreenImplLocked()。)

screenrecord命令执行类似的操作:它使用主显示器的图层堆栈创建虚拟显示,并捕获在那里渲染的任何内容。

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