Crear un servicio Android con Phonegap? (Haga que la aplicación phonegap se ejecute incluso cuando esté cerrada)


He estado trabajando en una aplicación para Android usando Phonegap y ahora me gustaría hacerlo para que cuando la aplicación esté cerrada todavía pueda ejecutar el código java/js en la aplicación. Así que entiendo que necesito crear un servicio. Si creo un complemento de servicio en phonegap, ¿puedo ejecutar el código javascript o solo Java?

¿Alguien ha hecho algo como esto? Encontré esta discusión, pero no parecía funcionar: http://groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 Así que eso es todo lo que tengo ahora mismo.

Antes de pasar a desarrollarlo nativo si no puedo entenderlo pensé que preguntaría si alguien ha hecho esto antes. Parece que no puedo encontrar ninguno de los plugins de phonegap que hacen algo similar.

EDITAR: Tengo una aplicación que ejecuta código Java como un servicio. Sin embargo, cuando llama a sendjavascript no funciona. Así que hay una manera de tener el código javascript ¿también se ejecuta en segundo plano cuando una aplicación se cierra con phonegap?

Gracias

Author: ThinkingStiff, 2012-04-27

4 answers

No, no es posible ejecutar código Javascript en segundo plano (al menos en mi opinión) como un servicio. Phonegap en Android utiliza una actividad especial llamada Droidgap , que aloja una vista WEB. Este control del navegador ejecuta el JavaScript. Esto significa que la ejecución de JS solo se puede manejar dentro de esta actividad, independientemente de si es visible o no.

El código que vinculó desde los grupos de Google intenta vincular un servicio desarrollado en Java a la actividad DroidGap, por lo que el servicio NO escrito en JS.

Puede tener alguna actividad en segundo plano dentro de su código JS dentro de su actividad infantil derivada de la actividad DroidGap. Por ejemplo, tenga un subproceso en segundo plano en su actividad, tenga una función de devolución de llamada JS y deje que el subproceso llame a esta funcionalidad de devolución de llamada.

Si realmente necesitas un servicio tienes que ir nativo.

Actualización:
El código JS solo se puede ejecutar con la actividad Droidgap. Una actividad puede tener 3 estados (basado en el Ciclo de vida de las actividades):

  1. visible
  2. invisible pero todavía cargado
  3. no cargado

Proporcioné un ejemplo en el que implementé un complemento de Phonegap. El plugin permite que la actividad se registre en SMS_RECEIVED. Cuando las actividades salen del ámbito (evento onbeforeunload), se anula el registro, por lo que solo se maneja el problema 1.

Cuando desee que se manejen los 3 problemas, debe reenviar la intent de SMS entrante a la actividad. Cuando no se carga el sistema cargará automáticamente y activará la actividad. Pero esto ya no es un servicio en segundo plano, su aplicación se haría visible cada vez que se recibe un SMS.

Si no desea esto (si realmente desea un servicio en segundo plano), debe proporcionar una implementación nativa.

 56
Author: ChrLipp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 15:27:12

Existe este artículo sobre cómo crear un servicio en Android con Phonegap que proporciona buena información sobre su problema.

Está usando un gran plugin para construir un servicio en segundo plano con phonegap fácilmente. Pero no se puede utilizar JS aunque

No encontré una manera de hacer que JS se ejecute en segundo plano. PERO puede pasar parámetros de Java a JS y viceversa con el plugin...lo cual es bastante útil. Todavía tendría que reescribir su código JS en Java aunque. ¿A menos que tengas una razón específica para querer que solo se ejecute JS? (Pero no debería haber...)

Espero que pueda ser útil para algunas personas que visitan esta página.

 8
Author: Bruno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-21 05:49:53

SÍ, y es muy simple... solo tiene que instalar el plugin backgroundJS:

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

Le permite ejecutar javascript en segundo plano y combinado con el complemento de notificación local, incluso puede enviar notificaciones al usuario en cualquier momento, solo tenga en cuenta que hacer esto hará que la batería se agote más rápido, también tenga en cuenta que esto podría crear un problema con la política de iOS. ¡Buena suerte!!!

 4
Author: Michel Tobon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-10 13:44:44

Puedes intentar añadir plugin cordova-plugin-background-mode

Pero como dice el autor:
Las tareas infinitas en segundo plano no son oficiales en la mayoría de los sistemas operativos móviles y, por lo tanto, no cumplen con los proveedores de tiendas públicas. Un éxito documento presentado no está garantizado. Utilice el plugin por su propio riesgo!

 2
Author: Maxim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-13 15:56:26