2

onRestart가 호출 될 때마다 사용자 자격 증명을 다시 인증해야합니다 (일반적으로 사용자가 &을 잠그지 않았거나 백그라운드에 놓은 다음 다시 반환 함).재시작시 재 인증 - Android

이 작동
@Override 
protected void onRestart() { 
    super.onRestart(); 

    Intent intent = new Intent(this, LoginActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setAction(LoginActivity.REAUTHENTICATE); 
    startActivity(intent); 
} 

의 LoginActivity가 나타났다, 그러나이 완료되면 첫 번째 활동의 onRestart는 다시 호출하고 LoginActivity 다시 열립니다 :

그래서 내가 그랬어.

어떻게 처리 할 수 ​​있습니까?

+0

해당 사용자가 아직 인증을받지 못하게하려면 변수가 있어야합니다 .... 세션이 유효하다는 것을 의미합니까? –

+0

Dheeresh, 그것을 나타내는 플래그가 있지만 클라이언트는 사용자가 onRestart를 완전히 재 인증하기를 원합니다. –

+0

startActivityForResult를 사용하면 LoginActivity를 열기 전에 onActivityResult가 호출됩니다 (onRestart 직후) –

답변

1

좋은 해결책이 있다면/어느 것이 든 시도해 볼 수 있습니다.

1- Put a boolean variable in shared pref named AuthentacationNeeded 
2- get that in OnRestart with default value true 
3-if value is true then only startActivity 
4- put that variable true in onpuase 

in Login activity 
4- put that variable false Before finish() 
+0

글쎄,이 작동합니다. 그러나 그것은 추악한 솔루션, 나는 또 다른 하나를 사용했습니다. (좋은 것도 아닙니다) –

+0

다른 방법은 무엇입니까? .......... –

+0

나는이 질문에 대답했습니다. 해결책은 –

2

글쎄, 나는 그것을 해결하기 위해 이것을 사용하지 :

private static final int REAUTHENTICATE = 80; 

    private boolean authenticated; 

    @Override 
    public void onRestart() { 
     if(authenticated) 
      return; 

     Intent intent = new Intent(this, LoginActivity.class); 
     intent.setAction(LoginActivity.REAUTHENTICATE); 
     startActivityForResult(intent, REAUTHENTICATE); 
    } 

    @Override 
    public void onStop() { 
     authenticated = false; 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == REAUTHENTICATE) 
      authenticated = true; 
    } 

글쎄, 내가 기대하지만, 어떤 작품이 그것을 더, 나는 누군가가 더 나은 솔루션을 찾을 수 있기를 바랍니다. 원인 onRestart는 onActivityResult 이후 계속 호출됩니다.

+0

+1하지만 더 나은 방법이 있어야합니다 ...... .... –