2016-08-12 2 views
1

Ich würde gerne wissen, ob es eine Möglichkeit gibt, zu unterscheiden, wenn die onResume() -Methode einer Aktivität von derselben App oder einer anderen Anwendung aufgerufen wird.Aktivität onResume() beim Ändern von Apps aufgerufen

Zum Beispiel würde ich gerne unterscheiden, wenn meine Hauptaktivität onResume() aufgerufen wird, wenn ich von WhatsApp oder einer anderen Aktivität meiner App zur App zurückkehre.

Ich weiß, dass es eine Möglichkeit gibt, dies mit der Berechtigung GET_TASKS zu tun, aber diese Methode ist veraltet und wird nicht empfohlen.

Danke

+4

„Ich als onResume meiner Haupttätigkeit unterscheiden möchten() aufgerufen wird wenn ich von WhatsApp oder einer anderen Aktivität meiner App zur App zurückkehre "- warum? – CommonsWare

Antwort

0

Es scheint, Sie wissen wollen, wenn App aus dem Hintergrund in den Vordergrund in jedem Activity kommt. Dies kann mit einer Klasse erreicht werden, die die Klasse Application erweitert und die Schnittstelle ActivityLifecycleCallbacks implementiert. Zum einen ist hier der Code für diese Klasse:

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); 
    } 

    ... 

} 

Wenn Sie in obigen Code bemerken sind wir im Grunde die App eine Karenzzeit von 5 Sekunden ergibt von einer Aktivität zur anderen zu wechseln. Wenn es mehr als das überschreitet, bedeutet dies, dass die App im Hintergrund war. Die oben genannte Klasse muss im Tag <application> Ihrer Manifestdatei unter android:name:"" Eigenschaft als android:name:"MyApplication" registriert sein.

Um dies in Ihrer Tätigkeit zu nutzen, außer Kraft setzen die onPause():

private boolean resumedFromBg; 

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

Lassen Sie mich wissen, wenn Sie in Probleme laufen ~

+0

Nicht wirklich, eigentlich kann ich wissen, wann irgendeine meiner Aktivitäten von Hintergrund zu Vordergrund kommt. Was ich nicht weiß ist von welcher Aktivität. Meine Aktivität ist nach der Verwendung von Facebook Messenger oder nach dem Aufruf einer Absicht aus einer anderen Aktivität meiner eigenen App in den Vordergrund gerückt? –

Verwandte Themen