회사에서 앱을 개발하는데 가장 최근에 열린 activity를 알아오는 기능이 필요했었다. 그래서 찾아보다가 리플렉션도 잠깐 건드려보기도 했는데, 굉장히 간단한 방법을 찾았다.


어려운 개념도 아니다. Application.ActivityLifecycleCallbacks라는 인터페이스를 구현해주기만 하면 된다. 메소드로 onActivityStarted, onActivityResumed 등이 있는데, 매개변수로 onStart, onResume 등을 호출한 Activity가 전달된다. 이걸 manifest에서 등록한 application 파일에서 구현하면 쉽게 최근 activity을 얻어올 수 있다.


public class WWAApplication extends Application { public static Activity mCurrentActivity = null; ActivityLifecycleCallbacks mActivityLifecycleCallbacks = new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { mCurrentActivity = activity; Log.i("WWAAplication", activity.getClass().getSimpleName()); } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { } }; @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks); } }


callback register 해주는 것 잊지 말고.


나는 이것을 이용하여 사용자가 어플리케이션 화면을 벗어나거나 화면을 off 하면 notification bar를 띄우고, 다시 화면으로 돌아오면 notification을 disable하였다. 이 부분에 관해 자세한 방법은 No, You Can Not Override the Home Button... But You Don't Have To! 참고.

블로그 이미지

NCookie

,