2011-10-19 4 views
1

내 애플리케이션의 세션을 기반으로 통계를 유지해야합니다. 문제는 안드로이드가 (백그라운드에서 서비스를 실행 중이기 때문에) 뒤로 버튼을 사용하여 애플리케이션을 종료 할 때도 애플리케이션을 닫지 않는다는 것입니다.Android 애플리케이션 세션 관리

응용 프로그램이 백그라운드에서 X 분 (전화 통화 또는 알람과 구별하기 위해) 인 경우 세션 정보를 재설정하고 싶습니다. 그것을 할 방법이 있습니까?

어쩌면 어떤 종류의 방송 수신기가 이벤트를 감지 할 수 있습니까?

시나리오를 조금 설명해 보도록하겠습니다. 인증 (암호 입력) 후에 만 ​​액세스 할 수있는이 응용 프로그램 부분이 있습니다. 이제는 사용자가이 부분에 들어가면 활동이 일시 중지 될 때마다 계속해서 사용자에게 인증을 요청하고 싶지 않습니다. 그러나 사용자가 Home 키를 누르고 20 분 후에 응용 프로그램으로 돌아 간다고 말하면 인증을 요청하고 싶습니다.

편집 : 여러 활동으로 작업 중이므로 단순히 onPause()에 플래그를 설정하는 응용 프로그램을 백그라운드로 감지 할 수 없습니다.

답변

4
private static boolean isApplicationGoingToBackground(final Context context) { 

     ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
     if (!tasks.isEmpty()) { 
      ComponentName topActivity = tasks.get(0).topActivity; 
      if (!topActivity.getPackageName().equals(context.getPackageName())) { 
       return true; 
      } 
     } 

     return false; 
    } 

전화. onStop은 화면을 차지하는 모든 것의 onStart 후에 호출됩니다. 동일한 apk 패키지의 액티비티이면 배경으로 들어 가지 않습니다. 여기에는 GET_TASKS 권한이 필요합니다. 활동을 취소하지 않고 나타나면 여전히 트리거됩니다 (사용자가 알림 바 또는 무언가에서 항목을 선택). 서비스에

또는 바인드는 & 때어 이동 중지를 ONSTART - 서비스가 다음의 모든 활동이 중지 될 때 onDestroyed (또는 onDestroyed에 의존하지 않으려면 트랙 호출하기 바인드합니다 대 결합됩니다 - 있기 때문에하지 않을 수 있습니다.).

0

완전히 확실하지 않지만 사용자가 뒤로 버튼을 사용하여 앱을 존재할 때 앱이 닫히는 것 같습니다 (다른 세션을 잡거나 동일한 세션을 공유하는 백그라운드에서 다른 서비스가 실행중인 경우 제외). 선호

귀하의 질문에 대답하려면

어쨌든 ... 거기에 당신이하고 싶었던 일을 할 수있는 두 가지 쉬운 방법 :.

  1. Flurry을 시도 정말 일을 잘 수행 또는 구글.. 미주리 분석 담즙, 그들은 모두 사용하기 쉽고 그들은 당신을 위해 그것을 처리합니다.

  2. 백그라운드 확인을 수행하려면 활동의 onPause() 블록에 SharedPreference를 기록하고 앱의 일부인 새 화면이 나타나면 새로 고침하고 동시에 오래된 하나가 이미 만료되었습니다 (onResume()에서 발생합니다). 중지시에

+0

Flurry/Google Analytics를 사용할 수는 있지만 재설정하려고하는 정보가 applciation 내부이며보고/추적과 관련이 없음을 알 수 있습니다. –

+0

나는 당신이 질문을 업데이 트를 참조하십시오. onPause는 레코드를 정확하게 유지하고 올바른 방식으로 감지 할 수 있으면 작동합니다. 짧게 유지하려면 SharedPreference를 사용하여 마지막 활성 시간을 유지하고 새로 고치십시오. onPause()를 설정할 수 없으면 onResume()을 설정하여 해당 시간을 확인하십시오. 전경에서 사야하기 때문에 항상 유효한 케이스입니다. 그런 식으로 신뢰하지 않으면, AlarmManager를 사용하여 상호 작용이 발생할 때마다 알람을 새로 고치고 보류중인 이벤트가 세션을 무효화하도록하십시오.이를 수행 할 수있는 방법은 많지만 환경 설정을 사용하는 것은 매우 간단합니다. – Edison

+0

여러 활동으로 작업하는 경우 중요하지 않습니다. 동일한 프로세스에서 실행되는 동일한 응용 프로그램 인 경우 일반적으로 명확한 스택이 있습니다. – Edison