0

我在 Media Projection API 上使用谷歌的示例项目。我观察到的是,每次屏幕方向更改时,VirtualDisplay返回的对象为

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

被破坏(设置为null),我必须重新启动屏幕捕获。我知道这可能是由于屏幕尺寸的变化而需要的,但我希望有一个方法可以避免破坏这个对象并仅仅更新它,这样屏幕捕获只会在按下停止按钮时停止。显然,可以在方向更改后以编程方式重新启动屏幕捕获,但我宁愿不这样做。我在这里是不是太乐观了?

4

1 回答 1

0

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

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

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

于 2018-01-23T15:48:54.403 回答