2012-08-27 2 views
0

내 응용 프로그램에서 A 주요 활동입니다. 그것의 A, B, C, D 등과 같은 무언가를 탐색 구글 클라우드 푸시 알림을 구현했습니다. 푸시 알림을 받으면 알림이 생성되고 클릭하면 활동 X로 이동합니다. 스택이 비어 있지 않으면 문제가 없습니다. 스택이 비어 있고 푸시 알림에서 실행 된 액티비티 x이 시작 활동으로 작동합니다. 다시 말해서 홈 버튼을 길게 눌러 앱이 A 액티비티 대신 X 액티비티 (알림에서 실행 된 액티비티)로 이동하면 다시 스택이 비어있을 때를 의미합니다. 도와주세요. 것활동 스택이 비어있을 때 알림에서 실행 된 활동 기본 활동으로 사용

답변

2

가장 간단한 것은 이동 활동이 하려고 할 때 활동 수명주기의 일환으로 불려 보호 무효 onUserLeaveHint()

에 대해, 문서 도구에서

onUserLeaveHint()을 무시하고 활동을 마무리하는 것입니다 사용자 선택의 결과로 백그라운드로. 예를 들어, 사용자가 홈 키를 누르면 onUserLeaveHint()가 호출되지만 전화가 걸려 올 때 통화 상태가 이 될 때이 자동으로 포어 그라운드로 이동하면 onUserLeaveHint()는 활동이 중단되었습니다. 이 메서드가 호출 된 경우 이 메서드는 활동의 onPause() 콜백 직전에 호출됩니다.

이 콜백 및 onUserInteraction()은 상태 표시 줄 알림을 지능적으로 관리하는 활동을 돕기위한 것입니다. 구체적으로, 에 대한 활동은 통지를 취소 할 적절한 시간을 결정하는 데 도움이됩니다.

사이비 코드,

@Override 
    protected void onUserLeaveHint() { 
     super.onUserLeaveHint(); 
     finish(); 
    } 

또한 더 참조 this answer를 확인할 수 있습니다.

UPDATE: 

HOME 키를 감지하는 또 다른 방법은 ActivityManager에서 Activity를 확인하는 것입니다. HOME 단추를 누르면 BaseActivity가 활동 목록의 두 번째 위치에 유지됩니다. 그래서 당신은

@Override 
    protected void onUserLeaveHint() { 
     super.onUserLeaveHint(); 
     Log.e("onUserLeaveHint()", "Yes"); 
     ActivityManager activityManager = (ActivityManager) 
           getSystemService(Context.ACTIVITY_SERVICE); 
     List<RunningTaskInfo> recentTasks = activityManager 
             .getRunningTasks(Integer.MAX_VALUE); 
     for (int i=0; i<recentTasks.size(); i++) { 
      if (i == 1 && recentTasks.get(i).baseActivity.toShortString() 
             .indexOf(getPackageName()) > -1) { 
       Log.e("Home Pressed", "Yes"); 
       break; 
      } 
     } 
    } 

또한, AndroidManifest를 파일에

<uses-permission android:name="android.permission.GET_TASKS"/> 

권한을 추가하는 것을 잊지 마세요, 아래 ActivityManager 사용하는 것을 확인할 수 있습니다. 더 자세한 내용은 this blog에서 찾을 수 있습니다.

+0

하지만 스택이 비어있을 때 주 활동을 시작해야합니다.하지만 스택이 비어 있고 알림에서 활동을 시작하면 나중에 시작 활동으로 작동합니다. – dmp

+0

예 홈 버튼을 눌렀을 때 감지하여 작업을 마칠 수 있습니다. –

관련 문제