에있는 경우 어떻게 탐지합니까? 내 앱의 동작은 전경에 있는지 여부에 달려 있습니다. 내 앱이 포 그라운드에있는 경우 감지하는 API (21)에 가장 좋은 방법 일 것입니다 무슨,()는 지원되지 않습니다 및 API (21) 다르게 행동한다GCM 메시지를받을 때 안드로이드 앱이 포 그라운드 (API 21)
이제Boolean onForeground = this.getPackageName().equalsIgnoreCase(
((ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE))
.getRunningTasks(1).get(0).topActivity.getPackageName()
);
getRunningTasks : API 21 이전 나는 다음을 사용?
구글은
public ActivityManager.RecentTaskInfo getTaskInfo()
을 권장하지만 난 내가 거기에서 필요한 정보를 얻을 수있는 방법을 볼 수 없습니다.
미리 감사드립니다.
편집 : @CommonsWare와 @ 크리스 스트래튼 제안한, 나는 onResume/onPause 상태를 추적 할 수 있습니다. WebView (내 제어 외부의 콘텐츠)에 의한 앱 충돌로 인해 시스템이 잘못된 상태로 남습니다. 잘못된 상태로 GCM을 보내면 다른 충돌이 사용자를 혼란스럽게 할 수 있습니다 (그/그녀는 그 순간 내 앱으로 아무 것도하지 않습니다).
따라서 다른 해결책을 찾고 있습니다.
앱의 UI 층이 GCM 메시지가 수신되었음을 알려 이벤트 버스를 사용하여 감지합니다. 앱의 UI 레이어 (액티비티/프래그먼트)를 등록하고 포 그라운드에서오고 갈 때 버스에서 등록을 취소합니다. UI 레이어가 이벤트를 처리하지 않았는지 확인하고 백그라운드 처리 (예 : '알림'발생) 방법이 있습니다. – CommonsWare
세 개의 이벤트 버스에 대해이 패턴을 구현 한 샘플이 있습니다. ['LocalBroadcastManager'] (https://github.com/commonsguy/cw-omnibus/tree/master/EventBus/LocalBroadcastManager), Square의 [Otto] (https : // github.com/commonsguy/cw-omnibus/tree/master/EventBus/Otto) 및 greenrobot의 [EventBus] (https://github.com/commonsguy/cw-omnibus/tree/master/EventBus/GreenRobot)를 참조하십시오. – CommonsWare
즉, 액티비티는 onResume()과 onPause() 사이에서 포어 그라운드에 있으며 애플리케이션은 액티비티 중 하나 *가 공통된 컴포넌트로 모든 호출 또는 메시징을 통해 추적 할 수있는 경우입니다. –