380 Stimmen

Prüfen, ob eine Android-Anwendung im Hintergrund läuft

Mit Hintergrund meine ich, dass keine der Aktivitäten der Anwendung derzeit für den Benutzer sichtbar sind?

-1voto

Sriram Punkte 55

Für eine Antwort ist es vielleicht zu spät, aber falls jemand zu Besuch kommt, schlage ich hier die Lösung vor, Es gibt viele Gründe, warum eine Anwendung wissen will, ob sie im Hintergrund ist oder in den Vordergrund kommt, einige davon sind 1. Um Toasts und Benachrichtigungen anzuzeigen, wenn der Benutzer in BG ist. 2. um einige Aufgaben auszuführen, wenn der Benutzer zum ersten Mal aus dem Hintergrund kommt, wie z. B. eine Umfrage, eine Neuberechnung usw.

Die Lösung von Idolon und anderen befasst sich mit dem ersten Teil, nicht aber mit dem zweiten. Wenn es in Ihrer Anwendung mehrere Aktivitäten gibt und der Benutzer zwischen ihnen wechselt, ist das Sichtbarkeitskennzeichen falsch, wenn Sie in der zweiten Aktivität sind. Es kann also nicht deterministisch verwendet werden.

Ich habe etwas getan, was von CommonsWare vorgeschlagen wurde: "Wenn der Dienst feststellt, dass keine Aktivitäten sichtbar sind, und so bleibt es auch für eine gewisse Zeit Halten Sie die Datenübertragung am nächsten logischen Haltepunkt an.

Die fettgedruckte Zeile ist wichtig und kann für den zweiten Punkt verwendet werden. Also, was ich tue, ist, sobald ich die onActivityPaused(), nicht ändern Sie die sichtbar auf false direkt, stattdessen haben einen Timer von 3 Sekunden (das ist die maximale, dass die nächste Aktivität gestartet werden sollte), und wenn es nicht onActivityResumed() Aufruf in den nächsten 3 Sekunden, ändern sichtbar auf false. Ähnlich in onActivityResumed(), wenn es einen Timer gibt, dann breche ich ihn ab. Zusammenfassend lässt sich sagen, dass visible zu isAppInBackground wird.

Leider kann ich den Code nicht einfügen...

-2voto

mtwagner Punkte 468

In meinen Aktivitäten onResume und onPause schreibe ich einen isVisible Boolean zu SharedPrefences.

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    Editor editor = sharedPrefs.edit();
    editor.putBoolean("visible", false);
    editor.commit();

Und lesen Sie es bei Bedarf woanders nach,

    // Show a Toast Notification if App is not visible (ie in background. Not running, etc) 
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
    if(!sharedPrefs.getBoolean("visible", true)){...}

Vielleicht nicht elegant, aber für mich funktioniert es...

-3voto

user2322866 Punkte 1

Ich möchte Ihnen empfehlen, dies auf andere Weise zu tun.

Ich vermute, Sie möchten den Startbildschirm anzeigen, während das Programm gestartet wird, wenn es bereits im Backend läuft, zeigen Sie ihn nicht an.

Ihre Anwendung kann die aktuelle Zeit kontinuierlich in eine bestimmte Datei schreiben. Prüfen Sie beim Starten Ihrer Anwendung den letzten Zeitstempel. Wenn current_time-last_time größer ist als die Zeitspanne, die Sie für das Schreiben der letzten Zeit angegeben haben, bedeutet dies, dass Ihre Anwendung angehalten wurde, entweder vom System oder vom Benutzer selbst beendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X