我在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
),我必须重新启动屏幕截图。据我所知,由于屏幕尺寸的变化,这可能是必需的,但我希望能够避免破坏这个对象并仅仅更新,以便屏幕捕获仅在停止按钮停止时停止按下。显然,可以在方向更改后以编程方式重新启动屏幕捕获,但我宁愿不这样做。我在这里过于乐观了吗?
答案 0 :(得分:0)
所以问题在于配置更改时android的默认行为。它基本上会破坏活动及其所有字段(在本例中包括VirtualDisplay实例)。此外,将VirtualDisplay实例保留为UI状态不是一种选择。所以我最终通过向我的活动添加configChanges
标记来here描述自己处理方向更改
<activity
android:name=".MyActivity"
android:configChanges="orientation|screenSize|keyboardHidden" />
这意味着在方向更改上不再销毁任何内容,但需要使用活动的onConfigurationChanged
回调手动处理布局更改。