티스토리 뷰

안드로이드의 잠금화면을 구현 하던 중


백그라운드에서 포그라운드로 올라올때 잠금액티비티를 띄워주면 되겠다는 생각으로 


열심히 구글링 해서 찾은 방법이다.


일단 따로 서비스를 돌리거나 라이브러리를 추가하지 않아도 되기에 좋은 방법인 것 같다. 


그리고 되게 쉬움.


-----------------------------------------------코드----------------------------------------------------------


Application을 상속받는 java파일을 하나 만든다.


//application은 하나의 파일받게 상속받을 수 없다. 고로 기존 프로젝트에 얘를 상속받는 놈이 있다면 그놈안에 코드를 넣어주어야 한다.


온크레딧 내부에 registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks()); 


이렇게 초기화 해주고 하단에 아래와 같은 코드를 작성해 준다.


AppStatus mAppStatus;

public PTTApp.AppStatus getAppStatus() {
    return mAppStatus;
}

public boolean isReturnedForground() {
    return mAppStatus.ordinal() == PTTApp.AppStatus.RETURNED_TO_FOREGROUND.ordinal();
}

public enum AppStatus {
    BACKGROUND,
    RETURNED_TO_FOREGROUND,
    FOREGROUND;
}



public class MyActivityLifecycleCallbacks implements ActivityLifecycleCallbacks {


    private int running = 0;


    @Override

    public void onActivityCreated(Activity activity, Bundle bundle) {


    }


    @Override

    public void onActivityStarted(Activity activity) {

        if (++running == 1) {

            mAppStatus = AppStatus.RETURNED_TO_FOREGROUND;

        } else if (running > 1) {

            mAppStatus = AppStatus.FOREGROUND;

        }

    }


    @Override

    public void onActivityResumed(Activity activity) {

    }


    @Override

    public void onActivityPaused(Activity activity) {

    }


    @Override

    public void onActivityStopped(Activity activity) {

        if (--running == 0) {

            mAppStatus = AppStatus.BACKGROUND;

        }

    }


    @Override

    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

    }


    @Override

    public void onActivityDestroyed(Activity activity) {

    }

}



이후 baseActivity 같이 상속구조를 만들어 최상위 액티비티 onResume에다 

((PTTApp) getApplication()).isReturnedForground();

를 갖다 쓰면 된다.