如何使用Lollipop以编程方式捕获屏幕截图

时间:2015-05-07 16:06:20

标签: android android-mediaprojection

Media Projection包是新的Lollipop,允许应用实时捕获设备的屏幕,以便流式传输到视频。我希望这也可以用于捕获单个静态屏幕截图,但到目前为止我还没有成功。当然,捕获的视频的第一帧可以工作,但我的目标是获得与设备像素分辨率相匹配的完美无损屏幕截图。仍然来自捕获的视频无法提供。

我尝试了很多东西,但我最接近解决方案的是首先发布一个invisible activity。然后,此活动将跟随API example开始屏幕捕获,其中可能包括询问用户的权限。启用屏幕捕获后,屏幕图像将在SurfaceView中生效。但是,我找不到从SurfaceView捕获位图的方法。关于此问题有很多questionsdiscussions,但似乎没有解决方案可行,并且有证据表明它是impossible

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您无法捕获SurfaceView的内容。

您可以做的是将SurfaceView替换为具有进程内使用者的Surface对象,例如SurfaceTexture。在从问题链接的android-ScreenCapture示例中,mMediaProjection.createVirtualDisplay()想要Surface发送图像。如果您创建SurfaceTexture并将其用于construct a Surface,MediaProjection生成的图像将可从OpenGL ES纹理中获得。

如果不是GLES,可以使用ImageReader类。它还提供了一个可以传递给createVirtualDisplay()的Surface,但是从软件访问像素更容易。