Tag: nexus6

捕获MediaProjection虚拟显示器输出到ImageReader的系统错误

我正在开发一个需要将屏幕捕获到位图进行传输的应用程序。 我正在尝试使用新的Android 5.0 android.media.projection API来进行屏幕捕获。 此API的工作流程最终会调用 mediaProjection.createVirtualDisplay(“Test Screen”, WIDTH, HEIGHT, DPI, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null); 在我最初尝试捕获时,我从SurfaceView中获取了表面对象。 这工作正常; 最终结果是在屏幕上绘制的显示器的微小副本(导致Droste效果 ) 我认为这个function几近完成,但我发现 SurfaceViews(从代码的角度来看)是不可读的; 你不能从他们那里得到一个位图。 在寻找其他解决方案时,我遇到了这个与我的目标非常相似的问题 ,并且在该线程中建议使用ImageReader而不是SurfaceView来获取传递给createVirtualDisplay API调用的Surface。 但是,当我更改我的代码以使用ImageReader代替SurfaceView时,我得到运行时logcat错误(没有exception),并且永远不会调用ImageReader的回调函数。 createVirtualDisplay调用还返回一个看似有效的VirtualDisplay对象。 这是logcat: 9230-9270/com.android.techrocket9.nanoid E/BufferQueueProducer﹕ [unnamed-9230-0] dequeueBuffer: createGraphicBuffer failed 9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer﹕ [unnamed-9230-0] dequeueBuffer: can’t dequeue multiple buffers without setting the buffer count 9230-9246/com.android.techrocket9.nanoid E/BufferQueueProducer﹕ [unnamed-9230-0] dequeueBuffer: can’t dequeue multiple buffers […]