LoginSignup
20
20

More than 3 years have passed since last update.

Androidアプリでforegroundとbackgroundを検知する

Last updated at Posted at 2016-06-09

アプリとして今foregroundにあるのか?backgroundに回っているのか?を検知するクラス。

  • アプリ起動時には○○しない、などの処理に使用した。

ActivityLifecycleCallbacksを拡張する

[参考]
* http://qiita.com/wasnot/items/e7e4699de4b21f150c63

これをベースにさせてもらいました。ActivityのonResume,onPauseで生きているactivityを判定するとFragment系で作っている画面が関わってくるとこの判定が狂う。
今回はほぼすべてのクラスが継承している親Activityが存在したので、そのActivityのライフサイクルを見て判断することにした。

MyLifecycleHandler
public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
    private boolean isForeground = false;

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(Activity activity) {
    }

    @Override
    public void onActivityResumed(Activity activity) {
        if (activity instanceof CommonActivity) {
            isForeground = true;
        }
    }

    @Override
    public void onActivityPaused(Activity activity) {
        if (activity instanceof CommonActivity) {
            isForeground = false;
        }
    }

    @Override
    public void onActivityStopped(Activity activity) {
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }

    /**
     * アプリが前面にいるかどうかを取得します.
     * @return Foregroundにいたら<code>true</code>,backgroundにいたら<code>false</code>をかえします
     */
    public boolean isForeground() {
        return isForeground;
    }

}

ApplicationクラスでHandlerを持っておく

Applicationクラスがhandlerをメンバー変数で持っておいた。

public class MyApplication extends Application {

 @Override
    public void onCreate() {
         lifecycleHandler = new MyLifecycleHandler();
    }
~    
    public boolean isAppForeground(){
        return lifecycleHandler.isForeground();
    }

アプリがforegroundかどうか取得する

foreground判定が必要なところで、
if(((MyApplication)context.getApplicationContext()).isAppForeground())
などで判定する。

もっとスマートにできたらいいのに!

20
20
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20