Modèle de conception pour l'action alternative si l'application en premier plan?

StackOverflow https://stackoverflow.com//questions/22001844

  •  20-12-2019
  •  | 
  •  

Question

Je suis en train de construire une action qui utilise Google Cloud Messaging pour recevoir des notifications push.

Cela implique un couple de notables composantes, à savoir:

  • Un WakefulBroadcastReceiver pour recevoir le message de la GCM.
  • Un IntentService pour être averti lorsqu'un GCM événement est reçu.

Je suis sûr que c'est le cas pour de nombreuses applications, je voudrais prendre une approche différente pour quand l'application a une activité au premier plan vs.lorsque l'application ne pas avoir une application au premier plan.

J'aimerais publier une notification de la barre de notification si l'application n'est pas active, et il suffit d'envoyer l'événement sur le premier plan de l'activité si l'application est active.

Est-il un modèle de conception pour cela?Comment dois-je déterminer si l'application est au premier plan vs.l'arrière-plan?

Était-ce utile?

La solution

Vous pouvez suivre une approche décrite dans ce blog lorsque vous créez un BroadcastReceiver dans votre Activity avec un positif de priorité (c'est à dire, plus élevé que la valeur par défaut de 0) qui intercepte une action spécifique et appelle ensuite abortBroadcast - elle traite de l'application du boîtier ouvert.Ensuite, vous enregistrez également un BroadcastReceiver dans votre Manifeste, qui gère la même action, mais à la priorité par défaut - c'est la solution de repli si l'application n'est pas ouverte et il crée le système de notification.

Vous pouvez ensuite l'utiliser sendOrderedBroadcast() pour envoyer votre diffusion à tous les récepteurs dans l'ordre de priorité.Si l'activité est ouverte, la première se charge de tout.Sinon, il sera par défaut à l'autre et de créer une notification.

Autres conseils

La façon dont je suggère de faire c'est comme suivant.

Ont tous la logique concernant la GCM dans un Service (je n'ai jamais utilisé IntentService, donc je ne sais pas au sujet de ses tripes, mais je vois qu'il hérite de Service).

Dans votre activité, vous avez probablement une façon de commencer le service (peut-être que l'utilisateur active grâce à un bouton), rien de nouveau ici.

Voici la partie amusante.Dans votre activité vous permet de gérer onPause() et onResume().Dans onResume() vous lier pour le service.Avec le mécanisme de liaison, vous pouvez obtenir un pointeur à votre service et laissez-lui savoir que vous êtes là "hey, je suis une activité et je suis ici...s'il vous plaît stocker un pointeur vers moi quelque part"et le service stocke un pointeur vers l'activité (appelons-la mActivity).Dans votre onPause() vous en aviser le service que vous êtes en sortir, pour le service fixe mActivity = null, et puis vous unbind à partir du service.

Avec ce mécanisme, chaque fois que le Service reçoit une notification push, test de la mActivity variable pour voir si il y a un encadrement de l'Activité.Avec un pointeur de votre Activité, vous pouvez appeler l'un de ses méthodes, de transmettre des informations...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top