2017-02-14 1 views
0

화면이 잠겨 있거나 (앱이 아직있는 상태에서) 앱이 백그라운드로 5 분 이상 이동 한 경우 앱을 로그 아웃하고 싶습니다. 나는 AppCompatActivity를 확장하는 BaseActivity를 가지고있다. 다른 모든 활동은 BaseActvity를 확장합니다.
BaseActivity에서 아래 코드를 사용했지만 5 분이 지나면 앱이 LoginActivity에서 단독으로 열립니다. 이걸 좀 도와 주실 수 있습니까? 아래5 분 동안 백그라운드에서 앱을 실행할 때 자동 로그 아웃 사용자, 사용자가 앱을 다시 시작할 때?

자바 코드 :

@Override 
    protected void onPause() { 
     super.onPause(); 
     Log.v(TAG, "on pause called"); 
     timer = new Timer(); 
     Log.i(TAG, "Invoking logout timer"); 
     LogOutTimerTask logoutTimeTask = new LogOutTimerTask(); 
     timer.schedule(logoutTimeTask, 300000); //auto logout in 5 minutes 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.v(TAG, "on resume called"); 
     if (timer != null) { 
      timer.cancel(); 
      Log.i(TAG, "cancel timer"); 
      timer = null; 
     } 
    } 

    private class LogOutTimerTask extends TimerTask { 

     @Override 
     public void run() { 

      //redirect user to login screen 
      Constants.SESSION_ID = ""; 
      Intent i = new Intent(getApplicationContext(), LoginActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(i); 
      finish(); 
     } 
    } 

편집

나는 가능한 모든 제안을 추가하지만 응용 프로그램을 실행할 때 타이머에도 노력하고 있습니다. 코드 스 니펫이 유용 할 것입니다.

+0

는 LoginActivity에 의도를 전달하지 않습니다. – user3040153

+0

대기중인 인 텐트가있는 경보 관리자를 사용합니다. –

답변

0
@Override 
protected void onPause() { 
    super.onPause(); 
    long LastTime= System.currentTimeMillis(); //save this time 
} 



@Override 
protected void onResume() { 
    super.onResume(); 
    long CurrentTime= System.currentTimeMillis(); //this is your current time 
    //get LastTime and compare 
    long difference = CurrentTime - LastTime; 
    // now convert difference into minutes and start login activity 
} 

이것은 도움이 될 수 있습니다.

0

당신은 사용할 수 있습니다

import java.util.Calendar 

Calendar c = Calendar.getInstance(); 
int seconds = c.get(Calendar.SECOND); 
int minutes = c.get(Calendar.MINUTES); 

이 순간에 당신에게 사용자의 시간을 제공 할 것입니다.

onStop()에 저장하고 onRestart()/onResume (파괴하는 경우)에서 살펴볼 수 있습니다. 거기에서 논리를 적용 할 수 있습니다. 몇 시간이 지난지에 대한 정보를 얻을 수 있도록 계산을하십시오. SharedPreferences 또는 원하는 방식으로 저장할 수 있습니다.

0

여기의 문제는 자동으로 로그인 화면으로 이동하는 코드가 포함 된 LogoutTimerTask 클래스에 있습니다. LogoutTimerTask 클래스 내에서 활동을 시작하지 마십시오. 대신, 전역 변수 값을 runout 메소드에서 logout으로 설정하고 5 분이 지나면 사용자가 앱에 다시 들어가면 onCreate에서 해당 변수를 사용하여 수동으로 사용자를 로그 아웃했는지 아닌지 확인하는 것이 좋습니다. 여기에서 적절한 활동 클래스를 호출하십시오.

0

다음 스 니펫을 사용하여이 문제를 해결했습니다. 로그인 한 후 조각을 사용하고 있기 때문에이 코드를 사용하여 단편을 포함하는 활동에서 나를 도왔습니다. 이 그냥 설정 당신이 거기에 논리를 로그 아웃 활동을 시작으로

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


    } 

    private class LogOutTimerTask extends TimerTask { 

     @Override 
     public void run() { 

      //redirect user to login screen 
      finish(); 
      Constants.SESSION_ID = null; 
     } 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     timer = new Timer(); 
     Log.i(TAG, "Invoking logout timer"); 
     LogOutTimerTask logoutTimeTask = new LogOutTimerTask(); 
     timer.schedule(logoutTimeTask, DISCONNECT_TIMEOUT); //auto logout in 5 minutes 
    } 

@Override 
    public void onResume() { 
     super.onResume(); 
     if (timer != null) { 
      timer.cancel(); 
      Log.i(TAG, "cancel timer"); 
      timer = null; 
     } 
} 
관련 문제