Android屏幕方向更改导致应用程序退出

时间:2011-02-28 22:18:35

标签: android rotation landscape screen-orientation screen-rotation

我有一个应用程序,我设置为仅通过设置

以纵向模式显示
android:screenOrientation="portrait"

清单中的每个活动。这很好用,旋转手机时我的应用程序屏幕不会旋转。

问题是,如果我在手机处于纵向方向启动应用程序,那么当我的第一个Activity运行时(动画启动画面),我将手机旋转到横向,同时第一个Activity仍在运行,下一个活动启动(它是从第一个活动的线程的finally块启动)应用程序将退出。它不会强制退出,它只是退出到主屏幕。 LogCat中没有抛出异常或其他任何异常来说明为什么会发生这种情况。屏幕永远不会旋转(因为它不应该旋转)。如果我在景观中使用手机启动应用程序,它可以正常工作。这只发生在我从肖像开始并旋转到横向后。

我试过把

android:configChanges="orientation"

在每项活动中我也尝试了

android:configChanges="orientation|keyboard|keyboardHidden|screenLayout"

我在活动中使用和不执行onConfigurationChanged时尝试了上述操作。当我实现它时,我只是忽略它(只是调用super.onConfigurationChanged)。

除了在清单中设置活动之外,我还尝试以编程方式将活动设置为纵向方向。

我也可以通过在物理键盘打开并在车载底座中启动应用程序启动应用程序,在原始的摩托罗拉Droid上实现这一点。应用程序启动,启动画面以纵向方向启动(即使键盘处于打开状态或手机处于车载底座中),但只要第二个活动启动,应用程序就会退出。

我认为这与在方向更改时被销毁的活动无关。我的所有全局数据都存储在我的应用程序的自定义Application类中,正如我之前提到的,在全局消失的情况下,我没有例外的空指针。

我正在使用Android 2.3.2在Verizon上运行Motorola Droid原创。

2 个答案:

答案 0 :(得分:0)

我建议以编程方式在启动画面或下一个活动中设置方向。 尝试实现此代码:

//get the WindowManager Service
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
//get the orientation
int orientation = display.getOrientation();
//orientation % 2 == 0 is portrait mode,
if ((orientation % 2) != 0) (android.view.IWindowManager.Stub.asInterface(ServiceManager.getService("window"))).setOrientation(0);

我希望这会奏效。

答案 1 :(得分:0)

应用程序因方向更改而关闭,因为您必须在res文件夹中提供特定资源

  • 例如:的布局陆 在res文件夹中 或

通过编程方式在运行时处理更改

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}