Android에서 앱의 Foreground와 Background 상태 확인하기
Android 애플리케이션을 개발하다 보면, 앱이 foreground인지 background인지 확인 후 그에 맞는 동작을 해야 할 때가 있습니다. 특히나 FCM에서 이 기능이 필요하게 됩니다.
그런데 이를 공식적으로 지원하는 방법이 없어서 개발자마다 제각각의 방법을 사용하고 있습니다. 이 중에서 아주 간단하게 클래스로 확인할 수 있는 방법을 소개합니다.
Foreground 및 Background 상태 확인 클래스 생성
아래와 같은 클래스를 만들어 줍니다:
public class Foreground implements Application.ActivityLifecycleCallbacks {
private static Foreground instance;
public static void init(Application app) {
if (instance == null) {
instance = new Foreground();
app.registerActivityLifecycleCallbacks(instance);
}
}
public static Foreground get() {
return instance;
}
private Foreground() {}
private AppStatus mAppStatus;
public AppStatus getAppStatus() {
return mAppStatus;
}
// check if app is in the background
public boolean isBackground() {
return mAppStatus.ordinal() == AppStatus.BACKGROUND.ordinal();
}
public enum AppStatus {
BACKGROUND, // app is in the background
RETURNED_TO_FOREGROUND, // app returned to foreground(or first launch)
FOREGROUND; // app is in the foreground
}
// running activity count
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 on ActivityDestroyed (Activity Activity){}
}
사용 방법
[STEP1]: Application을 상속받은 클래스에서 onCreate()
메소드 부분에 Foreground.init(this);
를 추가합니다.
[STEP2]: 사용하고 싶은 곳에서 Foreground.isBackground()
를 사용하면 됩니다.
0 개의 댓글:
Post a Comment