Ich habe ein paar Aktivitäten und einen Intent-Service, der eingehende GCM-Nachrichten behandelt.
Im Moment sende ich für jeden Push eine Benachrichtigung, und nachdem der Benutzer darauf klickt, wird er zum entsprechenden Bildschirm weitergeleitet.
Ich möchte dieses Verhalten ändern, dass, wenn die App sichtbar ist (jede Aktivität ist im Vordergrund), anstelle der Benachrichtigung eine Dialogmeldung angezeigt wird (mit entsprechender Aktion).
Irgendeine Idee, wie man es umsetzt?
Ich habe zwei Ideen, aber keine ist perfekt:
Irgendwelche anderen Lösungen?
Ich habe es nicht getestet, aber die Dokumente sagen, dass Sie die Nummer von laufende Aktivitäten für jede Aufgabe.
Versuchen Sie, die Aufgabe Ihrer Anwendung unter den derzeit ausgeführten Aufgaben zu finden:
%Vor% Google hat eine Notiz zu getRunningTasks()
hinzugefügt:
Hinweis: Diese Methode ist nur zum Debuggen und Präsentieren von Task-Management-Benutzeroberflächen vorgesehen. Dies sollte niemals für Kernlogik in einer Anwendung verwendet werden, z. B. die Entscheidung zwischen verschiedenen Verhaltensweisen basierend auf den hier gefundenen Informationen. Solche Anwendungen werden nicht unterstützt und werden wahrscheinlich in der Zukunft unterbrochen. Wenn beispielsweise mehrere Anwendungen gleichzeitig aktiv ausgeführt werden können, sind die Annahmen bezüglich der Bedeutung der Daten für den Steuerungsfluss inkorrekt.
So verwenden Sie es auf eigene Gefahr.
Überprüfen Sie auch, ob GCM-Sendungen bestellt wurden. Wenn dies der Fall ist, können Sie Ihre Standard BroadcastReceiver
mit den anderen in jeder Aktivität überschreiben. Spielen Sie einfach mit der Priorität von IntentFilter
s. Wenn% ce_de% mit höherer Priorität die Nachricht empfängt, kann abgebrochen werden es ist eine weitere Verbreitung. Für Ihre Anwendung bedeutet das, dass, wenn BroadcastReceiver
läuft, der Empfänger registriert wird, der den Dialog anzeigt und den Broadcast abbricht. Wenn keine Aktivität aktiv ist, zeigt Ihr Standardempfänger die Benachrichtigung an.
Eine mögliche Lösung (Idee 1):
Um zu erkennen, ob Ihre App im Vordergrund oder im Vordergrund läuft, können Sie einfach einen booleschen Wert in onPause / onResume:
setzen %Vor%Wenn Sie eine neue Absicht aus einer Benachrichtigung starten, wird diese Methode aufgerufen: (Wenn Sie singleTop verwenden), können Sie mit dem booleschen Wert bestimmen, was in der onNewIntent-Methode zu tun ist.
%Vor%Ich hoffe, es hilft!
Tags und Links java android push-notification google-cloud-messaging