使用Phonegap创建Android服务?(即使关闭也可以运行phonegap应用)


74

我一直在使用Phonegap开发Android应用程序,现在想制作它,因此当应用程序关闭时,它仍然可以在应用程序中执行java / js代码。所以我知道我需要创建一个服务。如果我在phonegap上创建服务插件,是否仍可以执行javascript代码或仅执行Java?

有没有人做这样的事情?我找到了这个讨论,但似乎没有用:http : //groups.google.com/group/phonegap/browse_thread/thread/722b0e796baa7fc6 所以这就是我现在所拥有的。

在转向本地开发之前,如果我无法弄清楚,我会问之前是否有人这样做过。我似乎找不到任何执行类似操作的phonegap插件。

编辑:我有一个执行Java代码作为服务的应用程序。但是,当它调用sendjavascript时,它将不起作用。因此,当使用phonegap关闭应用程序时,是否有办法在后台运行javascript代码?

谢谢


您想在后台运行哪种代码?
Coder_sLaY 2012年

我希望能够仍在后台运行javascript。这样,即使关闭应用程序,JavaScript仍会执行。
Jonovono 2012年

Answers:


56

不,不可能在后台运行Javascript代码(至少在我看来)作为服务。Android上的Phonegap使用名为Droidgap的特殊活动,该活动承载WebView。该浏览器控件执行JavaScript。这意味着JS执行只能在此活动内部进行处理,无论它是否可见。

您从Google网上论坛链接的代码试图将用Java开发的服务绑定到DroidGap活动,因此该服务不是用JS编写的。

在DroidGap活动的子活动中,您的JS代码中可以包含一些后台活动。例如,在您的活动中有一个后台线程,有一个JS回调函数,然后让该线程调用该回调函数。

如果您确实需要服务,则必须本地化。

更新:
JS代码只能与Droidgap活动一起执行。一个活动可以具有3个状态(基于Activites生命周期):

  1. 可见
  2. 隐形但仍然加载
  3. 未加载

我提供了一个示例,其中实现了Phonegap插件。该插件允许活动将自身注册到SMS_RECEIVED。当活动超出范围(事件onbeforeunload)时,它将注销,因此仅处理问题1。

如果要处理所有3个问题,则必须将传入的SMS意图转发给活动。未加载时,系统将自动加载并激活活动。但是,这不再是后台服务,每当收到SMS时,您的应用程序就会变得可见。

如果您不希望这样做(如果您确实需要后台服务),则必须提供本机实现。


3
谢谢。因此,如果我理解的话,可以创建一个调用JavaScript回调的服务吗?例如,我可以使用Java代码提供服务,当它收到文本消息时会调用javascript回调函数来执行一些JS代码?那将是完美的。我发现此插件似乎可以创建服务并调用Js代码:github.com/awysocki/C2DM-PhoneGap
Jonovono 2012年

太棒了,看起来不错。谢谢!因此,如果我在应用程序运行时按下返回按钮,它在收到输入文本时仍应写入控制台吗?好像不是吗?
Jonovono 2012年

1
不,因为我在活动关闭时注销了注册。根据您的要求,我们必须按意图唤醒活动,并且不需要插件。但是接下来的两天我无法提供样本。
ChrLipp 2012年

嗯,谢谢。所以应该不难吗?看起来很棒,我只需要它也可以执行js代码。
Jonovono 2012年

1
看起来您在“更新2”中的github链接已过时。
Mike N

9

这篇文章就如何建立在Android上的PhoneGap服务这给你的问题,一些有用的信息。

它使用了一个很棒的插件,以便通过phonegap轻松构建后台服务。但是你不能使用JS

我没有找到使JS在后台运行的方法。但是您可以使用插件将参数从Java传递到JS,反之亦然...这非常有用。不过,您仍然需要用Java重写JS代码。除非您有特定原因只希望运行JS?(但是不应该...)

希望对某些访问此页面的人有用。


请重新发布URL
SMKS

请重新发布网址
Ali Hayder

1
可能已经过时,但我想阅读这篇文章。它位于archive.org:web.archive.org/web/20130820140521/http://…
Jason,

4

是的,这非常简单...只需安装插件backgroundJS:

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

它允许您在后台运行javascript并与本地通知插件结合使用,甚至可以随时向用户发送通知,只需记住这样做会导致电池快用完,还请注意这可能造成iOS政策问题。祝好运!!!


1
不幸的是,它显示为“ Platform(s):iOS”,因此它不适用于Android :(
s.krueger 2014年

1
在我的情况下,上述插件没有无限运行,大约3分钟后,后台功能停止了。我试图将SetBackgroundSeconds方法设置为大约300秒,但是也没有用,控制台停止记录大约180秒。
Juan Carlos Alpizar Chinchilla 2014年

@Juan Carlos ...对我来说,它工作了大约6个小时,然后混乱了,重要的是您的应用程序中有活动在进行...我认为这很有效
Michel Tobon 2014年

@MichelTobon您的活动是什么意思?我有一个js间隔运行X分钟,具体取决于用户在设置中的选择,但是它的存活时间在进一步测试后的3-10分钟之间是随机的。也许我做错了什么,您可以分享有关实现的jsfiddle,gist或类似链接吗?
Juan Carlos Alpizar Chinchilla 2014年

1
@JuanCarlosAlpizarChinchilla这是小提琴,它非常简单 jsfiddle.net/EJE4R/6
Michel Tobon

2

您可以尝试添加插件 cordova-plugin-background-mode

但是正如作者所说:
无限后台任务在大多数移动操作系统上不受官方支持,因此不符合公共商店供应商的要求。成功的提交不获保证。使用插件需要您自担风险!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.