媒体投影软件包是新的Lollipop,允许应用程序实时捕获设备的屏幕以进行流式传输到视频。我希望这也可以用来捕获单个静止屏幕截图,但到目前为止,我还没有成功。当然,捕获的视频的第一帧可以起作用,但是我的目标是与设备的像素分辨率匹配完美,无损的屏幕快照。来自捕获的视频的静物无法提供。
我已经尝试了很多事情,但是我最接近解决方案的是首先发起一项隐形活动。然后,此活动遵循API示例进行启动屏幕捕获,其中可以包括询问用户的权限。启用屏幕捕获后,屏幕图像将在SurfaceView中进行。但是,我找不到从SurfaceView捕获位图的方法。对此有很多问题和讨论,但似乎没有解决方案可行,并且有一些证据表明这是不可能的。
有什么想法?
您无法捕获SurfaceView的内容。
您可以做的是用具有进度消费者的表面对象(例如surfaceTexture)替换表面视图。在与该问题链接的Android-Screencapture示例中,mMediaProjection.createVirtualDisplay()
希望一个表面将图像发送到。如果您创建surfaceTexture并使用它来构造表面,则通过opengl es纹理可用。
如果不是您的事,则可以使用ImagerEader类。它还提供了一个可以传递给createVirtualDisplay()
的表面,但是从软件访问像素更容易。