Ich habe einen BroadcastReceiver implementiert, der vom AlarmManager ausgelöst wird. Der AlarmManager wird auf BOOT_COMPLETED initialisiert. Also muss ich den Empfänger im Manifest deklarieren.So ermitteln Sie, ob eine meiner Aktivitäten im Vordergrund ist
Mein Problem ist, dass ich den BroadcastReceiver nur etwas tun soll, wenn keine meiner eigenen Aktivitäten im Vordergrund stehen (auch wenn der Benutzer nicht mit meiner Anwendung interagiert). Ich ziehe Informationen von einem Remote-Server und möchte den Benutzer nicht darüber informieren, wenn er sich gerade in meiner Anwendung befindet.
Bis jetzt habe ich noch keinen Weg gefunden, festzustellen, ob meine Anwendung im Vordergrund steht. Gibt es eine Möglichkeit, so etwas zu tun? Der ActivityManager sagt mir, ob meine Anwendung läuft, aber nicht, ob sie im Vordergrund ist. wie hier beschrieben
Das Problem ist so ziemlich das gleiche: Inform Activity from a BroadcastReceiver ONLY if it is in the foreground
LÖSUNG:
Nach mehreren Lösungen Auswertung i i schnell skizzieren wollen, was denken die beste Methode, mit Aktivitäten in der behandeln ist Hintergrund Vordergrund.
Die bevorzugte Möglichkeit besteht darin, einen Broadcast-Empfänger in der onResume-Methode Ihrer Aktivität zu registrieren und die Registrierung für die Aktivitäten von onPause aufzuheben. Jeder Dienst oder jedes andere Hintergrundelement muss dann eine Broadcast-Absicht mit einer bestimmten Aktion senden, die von Ihrer Aktivität abgefangen wird.
Wenn sich Ihre Aktivität im Vordergrund befindet, ist der Empfänger in der Absicht registriert und kann direkt mit der von Ihrem Dienst gesendeten Absicht umgehen. Wenn es nicht im Vordergrund ist, wird es nicht die Absicht erhalten, aber der Dienst, der die Übertragung aufgerufen hat, wird wissen, dass niemand seine Übertragungsabsicht abgefangen hat und in der Lage ist, selbst damit umzugehen. Zum Beispiel könnte es als die gewünschte Aktivität zu starten, zeigt eine Benachrichtigung usw.
"der Dienst, der die Sendung aufgerufen wird wissen, dass niemand seine Sendung Absicht abgefangen" - vielleicht eine dumme Frage, aber wie wird es wissen? – ostergaard
@ajostergaard Ich denke, es geht so: Broadcast gesendet "bist du im Voraus" Absicht. Wenn die Aktivität im Vordergrund ist, kann sie diese Absicht empfangen (weil die eigenen Empfänger in onResume registrieren) und die Antwort mit der Absicht "ja, ich bin im Vordergrund". Broadcast kann das erkennen, also über Activity State wissen. Übrigens. Überprüfen Sie meine Antwort für diese Frage unten :) – mklimek