Créer un service Android avec Phonegap? (Faites tourner l'application phonegap même si 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. Donc je comprends que j'ai besoin de créer un service. Si je crée un plugin de service sur phonegap puis-je encore exécuter le code javascript ou seulement le java?

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

avant que je me tourne vers le développement indigène si Je ne peux pas le comprendre pensé que je demanderais si quelqu'un a fait cela avant. Je n'arrive pas à trouver les plugins phonegap qui font quelque chose de similaire.

EDIT: j'ai une application qui 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

70
demandé sur ThinkingStiff 2012-04-27 05:59:11

4 réponses

Non, il n'est pas possible d'exécuter du code Javascript en arrière-plan (du moins à mon avis) comme un service. Phonegap sur Android utilise une activité spéciale appelée Droidgap , qui héberge un WebView. Cette commande de navigateur exécute le JavaScript. Cela signifie que L'exécution JS ne peut être traitée qu'à l'intérieur de cette activité, qu'elle soit visible ou non.

le code que vous avez lié à partir de Google Groups tente de lier un service développé en Java à la DroidGap activité, de sorte que le service n'est pas écrit dans JS.

vous pouvez avoir une activité de fond dans votre code JS dans votre activité d'enfant dérivée de L'activité DroidGap. Par exemple, avoir un thread de fond dans votre activité, avoir une fonction de rappel JS et laisser le thread appeler cette fonctionnalité de rappel.

si vous avez vraiment besoin d'un service, vous devez aller native.

mise à jour:

Le code JS ne peut être exécuté qu'avec L'activité Droidgap. Une activité peut avoir 3 états (basé sur le cycle de vie des activites ):

  1. visible
  2. invisible mais toujours chargé
  3. non chargé

j'ai fourni un sample dans lequel j'ai implémenté un plugin Phonegap. Le plugin permet à l'activité de s'inscrire SMS_RECEIVED. Lorsque les activités sortent du champ d'application (événement onbeforeunload), il se désiste, donc seul le numéro 1 est traité.

si vous voulez que les trois problèmes soient traités, vous devez transmettre l'intention du SGS reçu à l'activité. Quand il n'est pas chargé le système se chargera automatiquement et activera l'activité. Mais ce n'est plus un service de fond, votre application deviendrait visible dès qu'un SMS est reçu.

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

56
répondu ChrLipp 2016-02-25 15:27:12

il est cet article sur la façon de créer un service sur Android avec Phonegap qui donne de bonnes informations sur votre problème.

il utilise un grand plugin afin de construire un service de fond avec phonegap facilement. Mais vous ne pouvez pas utiliser JS bien

Je n'ai pas trouvé le moyen de faire courir JS en arrière-plan. Mais vous pouvez passer des paramètres de Java à JS et vice versa avec le plugin...ce qui est assez utile. Vous il faudrait quand même réécrire votre code JS en Java. A moins que vous n'ayez une raison précise pour ne vouloir que JS? (Mais il ne devrait pas l'être...)

espoir qui pourrait être utile à certaines personnes visitant cette page.

8
répondu Bruno 2016-06-21 05:49:53

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 javascript sur l'arrière-plan et combiné avec le plugin de notification locale, vous pouvez même envoyer des notifications à l'utilisateur à tout moment, il suffit de garder à l'esprit que faire cela va provoquer la batterie à s'épuiser plus rapidement, considèrent également que cela pourrait créer un problème avec l'iOS politique. bonne chance!!!

4
répondu Michel Tobon 2014-02-10 13:44:44

Vous pouvez essayer d'ajouter plugin cordova-plugin-contexte de la mode

mais comme le dit l'auteur:

Infinite tâches de fond ne sont pas officiellement pris en charge sur la plupart des systèmes d'exploitation mobiles et donc non conforme avec les vendeurs de magasin public. Une immersion réussie n'est pas garantie. Utilisez le plugin à vos risques et périls!

2
répondu Maxim 2017-02-13 15:56:26