74 votes

Créer un service Android avec Phonegap? (Avoir l'application phonegap en marche même quand elle est fermée)

Je travaille sur une application Android à l'aide de Phonegap et voudrais maintenant faire en sorte lorsque l'application est fermée, il peut encore exécuter java/js code dans l'application. Si je comprends bien, j'ai besoin de créer un service. Si je créer un service de plugin sur phonegap puis-je encore exécuter du code javascript ou seulement le java?

Quelqu'un a fait quelque chose comme ça? J'ai trouvé cette discussion, mais n'a pas l'air de fonctionner: http://groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 Donc, c'est tout ce que j'ai droit maintenant.

Avant de me tourner vers le développement de ce natif si je ne peux pas la comprendre pensé que je voudrais vous demander si quelqu'un l'a fait avant. Je n'arrive pas à trouver un de la phonegap plugins qui font quelque chose de similaire.

EDIT: j'ai une application qui s'exécute du code Java en tant que service. Cependant, quand il appelle sendjavascript il ne fonctionne pas. Donc, il y a un moyen d'avoir le code javascript s'exécutant en arrière-plan lorsque l'application est fermée avec phonegap?

Merci

55voto

ChrLipp Points 6445

Non, il n'est pas possible d'exécuter du code Javascript dans le contexte (au moins à mon avis) comme un service. Phonegap sur Android utilise une activité spéciale appelée Droidgap, qui accueille une WebView. Ce contrôle de navigateur exécute le JavaScript. Cela signifie que JS exécution ne peut traitées à l'intérieur de cette activité, peu importe si elle est visible ou non.

Le code est lié à partir de Google Groupes essaie de lier un service développé en Java pour la DroidGap de l'activité, de sorte que le service n'est PAS écrit en JS.

Vous pouvez avoir un peu de fond de l'activité au sein de votre code JS à l'intérieur de votre enfant une activité dérivée de la DroidGap activité. Par exemple, un thread d'arrière-plan dans votre activité, ont un JS fonction de rappel et de laisser le fil appeler cette fonctionnalité de rappel.

Si vous avez vraiment besoin d'un service, vous avoir à aller à la maternelle.

Mise à jour 1:
Code JS ne peut être exécutée qu'avec le Droidgap activité. Une activité peut avoir 3 états (basé sur le Cycle de vie des activités):

  1. visible
  2. invisible, mais toujours chargé
  3. pas chargé

J'ai fourni un échantillon dans lequel j'ai mis en place un plugin Phonegap. Le plugin permet à l'activité de s'inscrire SMS_RECEIVED. Lorsque l'activité est hors de portée (cas onbeforeunload), il désinscrit, de sorte que seulement le problème 1 est manipulé.

Quand yo voulez tous les 3 isses traitée, vous devez envoyer le SMS entrants à l'intention de l'activité. Quand il n'est pas chargé, le système va automatiquement charger et activer l'activité. Mais ce n'est pas un service d'arrière-plan plus, votre application serait de devenir visible chaque fois qu'un SMS est reçu.

Si vous ne voulez pas cela, (si vous voulez vraiment un service d'arrière-plan), vous devez fournir une implémentation native.

Mise à jour 2:
Il y a une autre mise en œuvre sur Github, ce qui résout le inactivité par l'affichage d'un toast et une notification. Lorsque l'utilisateur sélectionne la notification qu'il transmet à l'application.

9voto

Bruno Points 121

Il y a cet article sur comment créer un service sur Android avec Phonegap qui donne une bonne information sur votre problème.

C'est à l'aide d'un plugin dans le but de construire un service d'arrière-plan avec phonegap facilement. Mais vous ne pouvez pas utiliser JS si

Je n'ai pas trouver un moyen de faire en JS pour s'exécuter en arrière-plan. MAIS vous pouvez passer des paramètres à partir de Java JS et vice versa avec le plugin...ce qui est assez utile. Vous auriez encore besoin de reprendre ton code JS en Java. Sauf si vous avez une raison particulière pour ne voulez JS pour être exécuté? (Mais il ne devrait pas être...)

Espérons que pourrait être utile à certaines personnes visitant cette page.

4voto

Michel Tobon Points 18

OUI, et c'est très simple... il suffit d'installer le plugin backgroundJS:

https://build.phonegap.com/plugins/430

Il vous permet d'exécuter le javascript sur le fond et combiné avec le local plugin de notification, vous pouvez même envoyer des notifications à l'utilisateur, à tout moment, il suffit de garder à l'esprit que cela va provoquer la batterie à courir plus vite, aussi considérer que cela pourrait créer un problème avec l'iOS politique. bonne chance!!!

1voto

J'ai trouvé un article similaire à Bruno est un, mais plus facile à comprendre (les images pour l'installation).

http://red-folder.blogspot.co.uk/2012/09/phonegap-android-background-service.html

Le plugin est disponible ici.

https://github.com/Red-Folder/Cordova-Plugin-BackgroundService

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X