我正在使用谷歌关于媒体投影API的示例项目。 我观察到的是,每次屏幕方向更改时,返回的VirtualDisplay
对象为
mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
mSurface, null, null);
被销毁(设置为 null
(,我必须重新启动屏幕截图。我知道这可能是由于屏幕尺寸的变化而需要的,但我希望有一个办法可以避免破坏这个对象而只是更新它,以便屏幕捕获仅在按下停止按钮时停止。显然,可以在方向更改后以编程方式重新启动屏幕截图,但我宁愿不这样做。我是不是太乐观了?
因此,当配置更改时,问题出在android的默认行为上。它基本上破坏了活动及其所有字段(在本例中包括VirtualDisplay实例(。此外,在此处将 VirtualDisplay 实例保留为 UI 状态不是一种选择。所以我最终通过向我的活动添加configChanges
标签来自己处理方向更改,如此处所述
<activity
android:name=".MyActivity"
android:configChanges="orientation|screenSize|keyboardHidden" />
这意味着方向更改时不会再破坏任何内容,但需要使用活动的onConfigurationChanged
回调手动处理布局更改。