Frage

Ich erstelle eine Aktion, die Google Cloud Messaging zum Empfangen von Push-Benachrichtigungen nutzt.

Dies beinhaltet einige bemerkenswerte Komponenten, nämlich:

  • A WakefulBroadcastReceiver um die Nachricht von GCM zu empfangen.
  • Ein IntentService um benachrichtigt zu werden, wenn ein GCM-Ereignis empfangen wird.

Da dies sicher bei vielen Anwendungen der Fall ist, würde ich gerne einen anderen Ansatz verfolgen, wenn die Anwendung eine Aktivität im Vordergrund hat, als wenn die Anwendung eine Aktivität im Vordergrund hat.wenn die Anwendung dies tut nicht eine Anwendung im Vordergrund haben.

Ich möchte eine Benachrichtigung in der Benachrichtigungsleiste veröffentlichen, wenn die Anwendung nicht aktiv ist, und das Ereignis einfach an die Vordergrundaktivität weiterleiten, wenn die Anwendung aktiv ist.

Gibt es dafür ein Designmuster?Wie soll ich feststellen, ob die App im Vordergrund ist?der Hintergrund?

War es hilfreich?

Lösung

Sie können einen Ansatz wie in beschrieben verfolgen dieser Blogbeitrag wo Sie eine erstellen BroadcastReceiver in deinem Activity mit einer positiven Priorität (d. h. höher als der Standardwert von). 0), der eine bestimmte Aktion abfängt und dann aufruft abortBroadcast – Dies behandelt den App-Öffnungsfall.Sie registrieren dann auch eine BroadcastReceiver in Ihrem Manifest, das dieselbe Aktion ausführt, jedoch mit der Standardpriorität – dies ist der Fallback, wenn die App nicht geöffnet ist und die Systembenachrichtigung erstellt.

Sie verwenden dann sendOrderedBroadcast() , um Ihre Sendung nach Priorität an alle registrierten Empfänger zu senden.Wenn die Aktivität geöffnet ist, wird sie von der ersten Person bearbeitet.Andernfalls wird standardmäßig die andere verwendet und eine Benachrichtigung erstellt.

Andere Tipps

Ich schlage folgende Vorgehensweise vor.

Haben Sie die gesamte Logik bezüglich GCM in einem Dienst (ich habe sie noch nie verwendet). IntentService, Ich weiß also nichts über den Mut, aber ich sehe, dass es davon erbt Service).

In Ihrer Aktivität haben Sie wahrscheinlich eine Möglichkeit, den Dienst zu starten (vielleicht aktiviert der Benutzer ihn über eine Schaltfläche), hier gibt es nichts Neues.

Hier kommt der lustige Teil.In Ihrer Tätigkeit kümmern Sie sich um onPause() Und onResume().In onResume() Du binden zum Dienst.Mit dem Bindungsmechanismus können Sie einen Hinweis auf Ihren Dienst erhalten und ihm mitteilen, dass Sie dort sind.Hey Service, ich bin eine Aktivität und ich bin hier ...Bitte speichern Sie irgendwo einen Hinweis auf mich", und der Dienst speichert einen Zeiger auf die Aktivität (nennen wir sie mActivity).In deinem onPause() Sie benachrichtigen den Dienst, dass Sie das Unternehmen verlassen, damit der Dienst eingestellt wird mActivity = null, und dann du lösen aus dem Dienst.

Mit diesem Mechanismus testet der Dienst jedes Mal, wenn er eine Push-Benachrichtigung erhält mActivity Variable, um zu sehen, ob es eine gebundene Aktivität gibt.Mit einem Zeiger auf Ihre Aktivität können Sie jede ihrer Methoden aufrufen, Informationen weiterleiten ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top