Media Projection的VirtualDisplay对象在方向更改时被销毁

时间:2018-01-22 14:37:57

标签: android screen-capture screen-recording android-mediaprojection

我在Media Projection API上使用谷歌的sample project。我观察到的是,每次屏幕方向改变了返回的VirtualDisplay对象

mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
                mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mSurface, null, null);

被销毁(设置为null),我必须重新启动屏幕截图。据我所知,由于屏幕尺寸的变化,这可能是必需的,但我希望能够避免破坏这个对象并仅仅更新,以便屏幕捕获仅在停止按钮停止时停止按下。显然,可以在方向更改后以编程方式重新启动屏幕捕获,但我宁愿不这样做。我在这里过于乐观了吗?

1 个答案:

答案 0 :(得分:0)

所以问题在于配置更改时android的默认行为。它基本上会破坏活动及其所有字段(在本例中包括VirtualDisplay实例)。此外,将VirtualDisplay实例保留为UI状态不是一种选择。所以我最终通过向我的活动添加configChanges标记来here描述自己处理方向更改

<activity
    android:name=".MyActivity"
    android:configChanges="orientation|screenSize|keyboardHidden" />

这意味着在方向更改上不再销毁任何内容,但需要使用活动的onConfigurationChanged回调手动处理布局更改。