我有一个应用程序可以进行一些后台工作。在后台工作运行时,会显示进度圈,如果在此期间旋转设备,则活动将被“重置”,我想避免这种情况发生。
出于这个原因,我决定在此过程中禁用方向。我看到了许多相关的线程,但没有一个有效的解决方案,至少对于我的情况来说是如此。
发布的解决方案是关于修正活动方向,但你必须面对这样一个事实:如果使用以下命令,则无法返回REVERSE方向:
出于这个原因,我决定在此过程中禁用方向。我看到了许多相关的线程,但没有一个有效的解决方案,至少对于我的情况来说是如此。
发布的解决方案是关于修正活动方向,但你必须面对这样一个事实:如果使用以下命令,则无法返回REVERSE方向:
getResources().getConfiguration().orientation
以上函数在测试中无论是PORTRAIT还是REVERSE_PORTRAIT情况下都返回SCREEN_ORIENTATION_PORTRAIT。
因此,最终我使用旋转值来处理问题,我的代码“禁用旋转”如下:
int rotation = getWindowManager().getDefaultDisplay().getRotation();
switch(rotation) {
case Surface.ROTATION_180:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
break;
case Surface.ROTATION_270:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
break;
case Surface.ROTATION_0:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
case Surface.ROTATION_90:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
}
并且可以再次允许方向:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
在Android 4.1.2的设备上,这个功能完美地运行,但在Android 4.2.1的设备上,它并没有按照预期工作。
我猜测在活动生命周期中管理旋转应该是一个普遍的问题,但我还没有找到合适的解决方案。也许我正在寻找错误的方向,所以任何帮助都非常受欢迎。
提前致谢, 伊万。
Screen.lockOrientation(this)
。 - caw