防止登录屏幕上的屏幕旋转的android(Prevent login screen on scree

2019-08-16 23:16发布

我有一个应用程序,其中一个登录画面出现,每当一个活动去的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);
    }
}

但问题是,当我按Home键,回来给应用程序,登录屏幕没有显示出来,而不是它是直接恢复到活动中,因为mDisplay.getRotation()读取当前屏幕方向和if条件永远为真。

说得简单明了,我需要的登录界面中显示当用户按下Home键或切换到其它应用程序,但不是当屏幕旋转。

任何种类的建议或示例的是非常赞赏。 谢谢 !

Answer 1:

这里的东西应该工作 - 你可能要割肉出来有点...

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别人推荐的垃圾。



Answer 2:

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



文章来源: Prevent login screen on screen rotation android