2012-10-02 4 views
6

Normalerweise ruft Android auf Ihrem Activity, wenn es beginnt, verdeckt oder versteckt, gefolgt von onStop, wenn es überhaupt nicht mehr angezeigt wird. In meinem Spiel pausiere ich das Spiel in , damit der Benutzer nicht das Spiel verliert, während er sich anderswo umschaut.Wie kann ich feststellen, dass die Aktivität vom Benachrichtigungsbereich abgedeckt wurde?

Wenn jedoch der Benutzer die Benachrichtigungsleiste herunterzieht, behandelt es meine Activity, aber weder noch onStop werden aufgerufen. Dies scheint in der Dokumentation nicht erwähnt zu werden. Das Spiel tickt im Hintergrund, ohne dass jemand es ansieht. Gibt es eine andere Möglichkeit zu sagen, meine Activity wurde verdeckt, wenn dies passiert, so dass ich das Spiel pausieren kann, bevor der Benutzer verliert? Ich kann überhaupt nichts auf der Android-Entwickler-Website finden.

Antwort

3

Da die StatusBarManager nicht Teil der offiziellen API ist, finde ich es unwahrscheinlich, dass es eine Möglichkeit gibt, es zu erkennen. Auch bei Verwendung von Reflection scheint keine der statusbar-Klassen einen Haken für Listener zu haben.

Wenn es machbar ist, könnten Sie deactivate the statusbar. Ansonsten denke ich, Sie kein Glück :(

+0

Egal. 'onWindowFocusChanged' wird in der Aktivität ausgelöst, wenn die Benachrichtigung heruntergezogen wird. –

8

Die onWindowFocusChanged(boolean hasFocus) von Activity sollte den erforderlichen Zweck dienen. Es ist mit false aufgerufen, wenn der Benachrichtigungsbereich nach unten gezogen wird, und mit true einmal der Bereich nach oben gezogen wird, zurück. Die Android documentation entsprechende besagt, dass diese Methode „ist der beste Indikator dafür, ob diese Aktivität für den Benutzer sichtbar ist“. Es ist auch ausdrücklich, dass der Rückruf ausgelöst wird, wenn das „Statusleiste Benachrichtigungsfeld“ gezeigt.

Es ist wichtig zu beachten, dass diese Methode auch in anderen Situationen aufgerufen wird ist die Anzeige eines AlertDialog. onWindowFocusChanged wird sogar aufgerufen, wenn die Aktivität selbst eine AlertDialog zeigt. Dies kann eine Überlegung erfordern, abhängig davon, ob dein Spiel AlertDialogs oder etwas anderes verwendet, das eine Fokusänderung verursacht.

In einem ähnlichen Szenario wie dem in dieser Frage beschriebenen, haben wir das onWindowFocesChanged-Verfahren erfolgreich verwendet, z. auf einem Nexus 5 mit Android 4.4 oder einem Sony Xperia Tablet mit Android 4.1.

Verwandte Themen