2014-06-26 10 views
5

unterscheiden Wenn Sie eine Aktivität in android eingerichtet haben Feuer onNewIntent(), wenn es Absichten empfängt, wenn im gestoppten oder Pausenzustand. Es geht durch die folgende Sequenz, wenn es eine Absicht erhält beim Laufen:Wie kann man onPause() aufgrund onNewIntent vs Benutzeraktion in android

onPause() -> onNewIntent() -> onResume()

Aber wenn Sie aufgrund Benutzeraktion pausiert werden Sie nur bekommen onPause() .

Nun, wenn Sie etwas im Fall der Benutzer tun wollen versteckte App aber nicht im Fall, dass Sie einen neuen Hintergrund Absicht zu bekommen. Wenn du zum Beispiel eine Aufnahme annullierst, nur wenn deine App versteckt ist, scheint es, als ob du verschraubt bist.

Sie wissen gewohnt, bis irgendwann in der Zukunft, ob Sie das onPause bekommen, weil ein Nutzer Ihre App versteckt oder wegen einer eingehenden Hintergrund Absicht.

Fehle ich etwas oder ist das komplett kaputt?

Warum schicken sie den onNewIntent Rückruf nicht nur, wenn Sie eine Absicht bekommen beim Laufen. Anstatt die Pause, onNewIntent, Sequenz fortsetzen?

+0

Haben Sie einen Weg gefunden, zwischen den beiden Situationen zu unterscheiden? –

Antwort

0

Wenn jemand wieder auf diese stolpert - Es wäre nicht möglich, wenn onPause zu erkennen() wurde aufgrund neuer Absicht genannt, aber onResume() erkannt werden kann. Fügen Sie einfach BUNDLE_KEY_NEW_INTENT_CALLED hinzu, wenn onNewIntent() aufgerufen wird, und prüfen Sie dann das Flag in onResume() und führen Sie die erforderliche Aktion aus.

@Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     intent.putExtra(BUNDLE_KEY_NEW_INTENT_CALLED, true); 
     setIntent(intent); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Intent intent = getIntent(); 
     boolean isResumedDueToNewIntent = (intent != null && intent.getBooleanExtra(BUNDLE_KEY_NEW_INTENT_CALLED, false)); 
     if (isResumedDueToNewIntent) { 
      actOnNewIntent(); 
     } 
    } 
Verwandte Themen