我有一个应用程序可以做一些后台人员。当后台工作正在运行时,会显示进度圈,如果设备在此期间旋转,则活动将“重置”,我想避免这种情况。
因此,我决定在此过程中禁用定向。我已经看到了这个问题的不同线程,但没有一个有效的解决方案,至少在我的情况下是这样。
发布的解决方案是关于修复活动方向,但您必须处理这样一个事实:如果您使用以下命令,则不会返回反向方向:
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 的设备中却无法按预期运行。
我想管理活动生命周期中的轮换应该是一个常见问题,但我一直无法找到合适的解决方案。可能是我寻找的方向错误,所以非常欢迎任何帮助。
提前致谢,
伊万.