74

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

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

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

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

谢谢

4

4 回答 4

55

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

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

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

如果您真的需要服务,则必须使用本地服务。

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

  1. 可见的
  2. 不可见但仍然加载
  3. 未加载

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

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

如果您不想要这个(如果您真的想要后台服务),则必须提供本机实现。

于 2012-05-03T08:47:26.037 回答
9

这篇文章介绍了如何使用 Phonegap 在 Android上创建服务,它为您的问题提供了一些很好的信息。

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

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

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

于 2013-07-16T20:18:07.527 回答
4

是的,而且非常简单……只需安装插件 backgroundJS:

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

它允许您在后台运行 javascript 并结合本地通知插件,您甚至可以随时向用户发送通知,请记住这样做会导致电池更快耗尽,还要考虑这可能使用 iOS 策略创建问题。祝你好运!!!

于 2014-02-10T13:44:44.443 回答
2

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

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

于 2017-02-13T15:56:26.500 回答