2016-08-12 8 views
1

アクティビティのonResume()メソッドが同じアプリケーションまたは別のアプリケーションから呼び出されたときに区別する方法があるかどうかを知りたいと思います。アクティビティonResume()は、アプリケーションを変更するときに呼び出されます

たとえば、Whatsappやアプリケーションの別のアクティビティからアプリケーションに戻るときに、メインアクティビティのonResume()が呼び出されたときに区別したいと思います。

私はGET_TASKS権限でそれを行う方法があることを知っていますが、そのメソッドは推奨されず推奨されません。

は、あなたがアプリは、各 Activityの前景背景から来るとき知ってほしい思わ

+4

〜あなたがすべての問題に実行する場合、私に教えてください私がWhatsappや他のアプリのアクティビティからアプリに戻ったとき " - なぜですか? – CommonsWare

答えて

0

ありがとうございます。これは、Applicationクラスを拡張し、ActivityLifecycleCallbacksインターフェイスを実装するクラスを使用して実現できます。まず、ここではこのクラスのコードは次のとおりです。

public class MyApplication extends Application implements ActivityLifecycleCallbacks { 

    public boolean appInBackground; 
    private Handler mHandler; 

    ... 

    @Override 
    public void onActivityResumed(Activity activity) { 
     Log.i("Activity Resumed", activity.getLocalClassName()); 

     mHandler.cancelCallbacksAndMessages(null); 
     appInBackground = false; 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     Log.i("Activity Paused", activity.getLocalClassName()); 

     mHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        appInBackground = true; 
      } 
     }, 5000); 
    } 

    ... 

} 

あなたは上記のコードでは、我々は基本的に5秒の猶予期間が他の1つのアクティビティから切り替えるためのアプリを与えている気付いた場合。それ以上であれば、アプリがバックグラウンドであったことを意味します。上記のクラスはandroid:name:""プロパティのマニフェストファイルの<application>タグにandroid:name:"MyApplication"として登録する必要があります。

onPause()オーバーライドし、あなたの活動でこれを使用するには:

private boolean resumedFromBg; 

@Override 
protected void onPause() { 
    super.onPause(); 
    resumedFromBg = ((MyApplication) getApplication()).appInBackground; 
} 

が、私は私の主な活動のonResume()が呼び出されたときに区別したい」

+0

実際には、実際に私の活動のどれがバックグラウンドからフォアグラウンドになるかを知ることができます。私が知らないことは、どの活動から来たのかです。 Facebookメッセンジャーを使用した後、または自分のアプリの別のアクティビティからインテントを呼び出した後、私のアクティビティがフォアグラウンドになりましたか? –

関連する問題