J'ai mis en place un BroadcastReceiver qui est déclenché par la AlarmManager. Le AlarmManager est initialisé sur BOOT_COMPLETED. Donc, je dois déclarer le récepteur dans le manifeste.
Mon problème est que je veux le BroadcastReceiver seulement faire quelque chose quand aucun de mes propres activités sont au premier plan (aka l'utilisateur n'est pas en interaction avec mon application). - Je extraire des informations à partir d'un serveur distant et ne veulent pas d'avertir l'utilisateur si il est actuellement dans mon application, de toute façon.
Jusqu'à présent, je n'ai pas réussi à trouver un moyen pour déterminer si mon application est au premier plan. Est-il possible de faire une telle chose? Le ActivityManager dit moi si ma demande est en cours d'exécution, mais pas si elle est au premier plan.
Le problème est à peu près la même que celle décrite ici: Informer de l'Activité à partir d'un BroadcastReceiver que si elle est au premier plan
SOLUTION:
Après avoir évalué plusieurs solutions, je veux rapidement décrire ce que je pense est la meilleure méthode pour traiter les activités en arrière-plan/premier plan.
Le meilleur moyen est de vous inscrire à un récepteur de radiodiffusion dans la méthode onResume de votre activité et de la supprimer de la liste sur l'activité des onPause. Tout service ou tout autre élément de décor que de besoin pour envoyer une diffusion intention avec une action spécifique de votre activité d'interception.
Si votre activité est en premier plan, il aura son intention récepteur enregistré et est en mesure de traiter directement avec l'intention d'envoyer à partir de votre service. Si elle n'est pas au premier plan, il ne recevra pas l'intention, mais le service que invokved la diffusion se fera à savoir que personne ne intercepté sa diffusion intention et sera en mesure de faire face avec lui-même. Par exemple, il pourrait que le lancement de l'activité souhaitée, afficher une notification etc.