Android GCM: unterschiedliche Art der Handhabung Push abhängig davon, ob die App sichtbar ist oder nicht

8

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:

  • Verfolgen Sie jede Aktivität in der Anwendung, wenn die Aktivität sichtbar ist, keine Benachrichtigung anzeigt, aber eine Absicht an die Aktivität gesendet hat (keine nette Lösung)
  • Registrieren / Abmelden des zweiten Rundfunkempfängers in jeder Aktivität onResume / onPause, "fangen" die eingehende GCM-Sendung (ich bin mir nicht sicher, ob es möglich ist).

Irgendwelche anderen Lösungen?

    
kmalmur 07.04.2014, 10:45
quelle

2 Antworten

1

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.

    
Alexander Sukharev 10.04.2014, 19:58
quelle
3

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!

    
Daan Oerlemans 07.04.2014 11:51
quelle