我有一个应用程序,使一些背景人员。当后台工作正在运行时,将显示圆圈,如果在此期间旋转设备,则“活动”将“重置”,我希望避免这种情况。
出于这个原因,我决定在此过程中禁用方向。我已经看到了这个问题的差异线程,但没有一个有效的解决方案,至少在我的情况下。
发布的解决方案是关于修复活动方向,但您必须处理以下事实:如果您使用,则不会返回REVERSE方向:
getResources().getConfiguration().orientation
上述函数为PORTRAIT和REVERSE_PORTRAIT情况都返回SCREEN_ORIENTATION_PORTRAIT(至少在我的测试中)。
所以最后我使用了Rotation值来处理它,所以我的代码“禁用旋转”是:
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的设备中,它无法按预期工作。
我认为在活动实时循环中管理轮换应该是一个常见问题,但我无法找到合适的解决方案。可能是我正朝着错误的方向前进,所以任何帮助都非常受欢迎。
提前致谢, 伊凡。
答案 0 :(得分:13)
如果要禁用手机的方向更改,则可以在清单中使用此代码
<activity android:name=".class_name"
//如果你想要你的画面画像
android:screenOrientation="portrait" >
//如果您希望以横向模式进行屏幕
android:screenOrientation="landscape" >
如果您希望手机改变方向但阻止该过程重新启动,那么您可以在班级中使用onConfigurationChanged方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation change
if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) {
super.onConfigurationChanged(newConfig);
}
}
答案 1 :(得分:1)
试试这个..
您的代码没有错误。这是正确的我检查了它。在onConfigurationChanged
中使用可能产生差异的代码,使用下面的代码来禁用活动重置。
<activity
android:name="YourActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/>
答案 2 :(得分:0)
您可以覆盖on onConfiguratoinChanged方法以禁用方向更改:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation change
if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) {
super.onConfigurationChanged(newConfig);
}
}
不要忘记在AndroidManifest.xml文件中启用方向更改的侦听器:
<activity android:configChanges="orientation" >
答案 3 :(得分:0)
简单:在android清单中的活动名称之后添加一行
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale
这对我有用。