防止屏幕旋转android登录界面

时间:2013-02-13 21:35:29

标签: android android-orientation android-windowmanager

我有一个应用程序,只要活动进入onPause状态,就会显示登录屏幕。通常,当屏幕方向改变时,活动进入onPause状态,因此我在某种程度上阻止了设备旋转时的登录屏幕。请参阅下面的代码,

protected void onPause() {
    super.onPause();

    WindowManager mWindowManager =  (WindowManager) getSystemService(WINDOW_SERVICE);
    mDisplay = mWindowManager.getDefaultDisplay();

    mOrientation = mDisplay.getRotation();

    if(mOrientation == 1 || mOrientation == 2 || mOrientation == 3 || mOrientation == 0)
    {
        inApp = true;
    }
    if (!inApp) {

        SavedState.setState(this, "HomeActivity");

        Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
        startActivity(intent);
    }
}

但问题是,当我按下主页按钮并返回应用程序时,登录屏幕没有显示,而是直接恢复到活动,因为mDisplay.getRotation()读取屏幕当前方向并{{1条件总是变为真。

为了简单明了,我需要在用户按下主页按钮或切换到其他应用程序时显示登录屏幕,而不是在屏幕旋转时显示。

非常感谢任何建议或示例。谢谢!

2 个答案:

答案 0 :(得分:0)

这是应该有用的东西 - 你可能需要充实它......

class MyActivity... {
    private boolean loggedIn = false;

@Override
protected void onSaveInstanceState( Bundle data ) {
    super.onSaveInstanceState( data );
    data.putBoolean( "loggedIn", loggedIn );
}

@Override
protected void onUserLeaveHint() {
    isLoggedIn = false; // user pressed home
}

@Override 
protected void onCreate( Bundle data ) {
    isLoggedIn = data.getBoolean( "loggedIn", false );
    ....
}

@Override
protected void onResume() {
    if( !isLoggedIn ) {
        /// Log in...
    }
}

此模式使用首选方法使用/恢复活动状态,作为奖励,如果按下主页按钮(或用户活动决定移动到其他应用程序),则注销用户。请注意,电话呼叫不应该在此处记录用户 - 这在大多数情况下是所需的行为。

确保删除其他人推荐的android:configChanges垃圾。

答案 1 :(得分:-2)

默认情况下,Android实际上会在轮换时销毁并重新启动您的活动。这会导致调用onPause()onStop()onDestroy()onCreate()onStart()onResume()。避免这样的问题的最好方法是告诉Android不要这样做。在清单中将android:configChange="orientation"添加到您的活动中。它将防止破坏,并在旋转时调用函数。几乎在所有情况下,它仍会正确地重绘您的屏幕。