startForeground()导致cordova出现问题

46

我在我的 Cordova 应用中使用一个服务,在 onCreate 中生成一个 startForeground 通知。如果应用程序通过滑动杀死并重新启动,则 cordova 设备就绪事件不再触发。似乎当应用被重新启动时,cordova 对象本身未被定义。我收到以下错误消息:

E/Web Console(19472):Uncaught TypeError: Object #<Object> has no method 'exec' at file:///android_asset/www/src/jsFile.js:31

第31行及其后面的代码:

cordova.exec(function (r) {
            if (callback) {
                callback(r);
            }
        }, function (err) {
            if (callback) {
                callback(false);
            }
        }, "Plugin", "functionName", []); 
问题只会在我的服务中使用startForeground时出现,如果我将代码中的这部分注释掉,一切都正常工作。我非常需要以下几个问题的帮助:
  • 是否有可能手动运行cordova?
  • 如何使用startForeground启动服务,但仍然可以在杀死并重新启动应用程序后触发cordova设备已准备就绪

编辑:

在制作了两个快速示例项目之后,一个是Cordova 3.6版本(我用于实际应用程序的版本),另一个是Cordova 5.1版本,我意识到问题在新版本的Cordova中不存在。但是我不想更新,因为:

  • 不要改变运行中的系统
  • 由于我已经在我的应用程序中安装了许多插件,所以我不知道新版本中可能不再起作用的插件。
  • 我很懒。

您有什么想法可以解决从3.6到5.1的更改,以解决错误,并且是否可以相应地更新我的3.6代码?

编辑2:

这不是此问题的副本。在这个问题中,deviceReady回调被错误地传递了。这在我的应用程序中并非如此,并且如果我不在服务中使用startForeground,这样做是没有意义的。


1
你能否编辑你的问题并提供JAVA代码(插件代码)? - Karan Kumar
1
没关系(99.9%确定),因为我可以调用任何我想要的插件,错误仍然是一样的。 - Michael Kunst
只是一个简单的建议:如果你仍然有问题(我猜你已经找到了解决方案),请确认你的 useCapture 参数在事件监听结束时是否设置为 falseaddEventListener('deviceready', onDeviceReady, false); - Ivan Gabriele
@MartinZeitler,我添加了一个解释,为什么这不是您链接的问题的重复。 - Michael Kunst
显示剩余2条评论
1个回答

1
似乎您遇到了与应用程序生命周期有关的问题。当您滑动关闭或强制关闭应用程序时,应用程序的进程会被终止,因此在重新启动时,如果您没有将依赖对象或变量保存在状态捆绑包中,它们将返回为空,因为活动正在假设这些内容是可用的。您能否粘贴您在onCreate()中的代码?我猜那里是您定义cordova的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接