以编程方式禁用和启用Android中活动的方向更改

我有一个应用程序,使一些后台人员。 当后台工作正在运行一个进度的时候,如果设备在这段时间内被旋转了,那么活动就会“重置”,我想避免这种情况。

出于这个原因,我决定在这个过程中禁用定位。 我已经看到这个问题differends线程,但没有一个有效的解决scheme,至less在我的情况。

发布的解决scheme是关于修复活动方向,但是如果您使用以下操作,则必须处理REVERSE方向未返回的事实:

getResources().getConfiguration().orientation 

上面的函数返回SCREEN_ORIENTATION_PORTRAIT对于PORTRAIT和REVERSE_PORTRAIT情况(至less在我的testing中)。

所以最后我用旋转值来处理,所以我的代码“禁用旋转”是:

 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的设备中,它并不像预期的那样工作。

我想在活动周期中pipe理轮换应该是一个常见问题,但是我一直没有find合适的解决scheme。 可能是我正在寻找错误的方向,所以任何帮助真的很受欢迎。

在此先感谢,伊万。

Solutions Collecting From Web of "以编程方式禁用和启用Android中活动的方向更改"

如果您想禁用手机的方向更改,则可以在清单中使用此代码

 <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); } } 

尝试这个..

你的代码没有错。 这是正确的,我检查了它。 在onConfigurationChanged中使用该代码可能会有所不同,另一件事是使用下面的代码来禁用活动重置。

 <activity android:name="YourActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:windowSoftInputMode="adjustPan"/> 

您可以覆盖on onConfiguratoinChanged方法来禁用方向更改:

 @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change if (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE) { super.onConfigurationChanged(newConfig); } } 

不要忘记在AndroidManifest.xml文件中启用orientation orientation监听器:

 <activity android:configChanges="orientation" > 

简单:在Android清单中的活动名称后添加一行

 android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale 

这对我有效。