0

我有一个应用程序,只要活动进入 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()读取屏幕当前方向并且if条件总是为真。

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

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

4

2 回答 2

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...
    }
}

此模式使用首选方法使用/恢复 Activity 的状态,并且作为奖励,如果按下 Home 按钮(或用户 Activity 决定移动到不同的应用程序),则注销用户。请注意,电话不应在此处将用户注销-在大多数情况下,这是所需的行为。

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

于 2013-02-13T22:00:31.843 回答
-2

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

于 2013-02-13T21:39:03.563 回答