2013-02-13 3 views
0

활동이 onPause 상태가 될 때마다 로그인 화면이 나타나는 응용 프로그램이 있습니다. 일반적으로 화면 방향이 바뀌면 활동이 onPause 상태로 바뀌므로 장치가 회전 할 때 로그인 화면이 표시되지 않습니다. mDisplay.getRotation() 화면 전류를 읽기 때문에 아래의 코드,화면 회전시 로그인 화면 방지 android

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

를 참조하지만 문제는 내가 홈 버튼을 누르면하고 다시 응용 프로그램 제공, 로그인 화면 대신 직접 활동 재개 나타나지 않습니다 오리 엔테이션 및 if 조건은 항상 사실이됩니다.

간단하고 명확하게 말하면 사용자가 홈 버튼을 누르거나 다른 응용 프로그램으로 전환 할 때 표시되는 로그인 화면이 필요하지만 화면 회전시 표시되지 않아야합니다.

어떤 종류의 제안이나 사례라도 감사하게 생각합니다. 감사 !

답변

-2

기본적으로 Android는 실제로 회전시 활동을 파괴하고 다시 시작합니다. 이로 인해 onPause(), onStop(), onDestroy(), onCreate(), onStart(), onResume()이 호출됩니다. 이런 문제를 피하는 가장 좋은 방법은 안드로이드에게 그렇게하지 말라고하는 것입니다. 매니페스트에 활동에 android:configChange="orientation"을 추가하십시오. 파괴를 방지하고 회전시 함수를 대신 호출합니다. 거의 모든 경우에 여전히 화면이 올바르게 다시 그려집니다. ,

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

이 패턴은/사용 선호하는 방법을 사용하여 활동 상태를 복원하고 보너스로 ... 당신이 조금을 구체화해야 할 수도 있습니다 -

+0

api 13 이상에서는 configChange 목록에 screenSize도 포함해야합니다. – Clyde

+0

매니페스트 파일에서이 태그'android : configChanges = "orientation | screenSize"를 사용해 보았지만 여전히 동일합니다. 당신의 대답은 '파괴를 막고 회전 대신에 함수를 호출 할 것입니다.' –

+1

그것은 실제로 그것을 피하는 "최선의 방법"이 아닙니다. 선호되는 방법은 onSaveInstanceState를 구현하고 onCreate에 전달 된 'Bundle'을 평가하는 것입니다. – 323go

0

는 다음 작업을해야 뭔가 홈 버튼을 누르면 (또는 사용자 활동이 다른 앱으로 이동하기로 결정한 경우) 사용자를 로그 아웃합니다. 전화 통화는 사용자를 여기에 로그 아웃해서는 안되며 대부분의 경우 원하는 동작입니다.

다른 사람이 권장 한 쓰레기 android:configChanges을 제거했는지 확인하십시오.