Question

Peut-être qu'il est facile, mais je ne pouvais pas vraiment comprendre cela juste si loin ... Je suis un BroadcastReceiver attendant d'être déclenchée par le AlarmMangager -. Cela fonctionne bien

: parce que l'événement, si elle se produit, a besoin de rafraîchir certains éléments à l'écran de l'activité principale, je voudrais envoyer une intention de ce BroadcastReceiver de fond à mon activité - mais seulement si il est actuellement au premier plan, aka actif.

Si elle ne fonctionne pas ou pas visible, je ne me soucie pas - et la dernière chose que je veux faire est de commencer l'activité par mon intention! Je poignée de repeindre des vues dans ma méthode onResume (), donc je ne me soucie pas du tout.

Les conseils sur la façon de le faire? Merci!

EDIT: mon BroadcastReceiver attend les alarmes qui doivent être notifiées à l'utilisateur. Ainsi, il doit être là et a déclaré dans le manifeste. Le problème est:. Il devra décider si l'activité mentionnée est actuellement en avant ou pas

Était-ce utile?

La solution

Alors ce qui est presque la réponse de Bino, mais: au lieu de déplacer le récepteur dans l'activité, utilisez deux récepteurs, avec différents Intentions. Le premier est votre intention d'alarme d'origine, avec un récepteur enregistré dans le manifeste que vous avez déjà, et que le récepteur envoie une seconde intention de diffusion, qui est gérée par un récepteur enregistré par l'activité comme le dit Bino.

Je l'ai fait dans mon propre projet de minuterie, sur GitHub. Voici le récepteur d'alarme et requery récepteur . Hope qui aide.

Autres conseils

Je crois que vous êtes familier avec AlarmManager maintenant (création d'une nouvelle alarme, enregistrer un récepteur ...) donc je ne parlerai pas de cela. Il suffit de vous donner une solution à votre question.

Au lieu d'enregistrer un BroadcastReceiver dans un fichier de classe et dans le manifeste, vous créez seulement une nouvelle BroadcastReceiver dans votre activité, puis, inscrivez-vous dans la méthode onResume et désenregistrer dans la méthode OnPause, STH comme ceci dans votre activité:

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
      //do something       
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction("your alarm action");
    ...
}

@Override
protected void onResume() {
registerReceiver(mIntentReceiver, mIntentFilter);
    ...
super.onResume();
}

@Override
protected void onPause() {
unregisterReceiver(mIntentReceiver);
    ...
super.onPause();
}

Le récepteur ne reçoit l'intention d'alarme lorsque votre activité est en avant-plan)

(Désolé si mon anglais est pas clair)

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