是否可以从在cordova android插件中运行的后台线程调用javascript

时间:2014-06-23 23:42:26

标签: java javascript android cordova

我在Android上使用原生插件(其他平台)有一个Cordova应用程序。

我的插件是在应用程序启动时加载的(在plugin.xml中为<param name="onload" value="true" />),而我的本机代码在initialize方法中有一些工作(从CordovaPlugin类重载)。

基本上,我在initialize方法中所做的工作会导致事件稍后生成,我需要将此事件传递给javascript API。

有没有什么方法可以从插件的本机端异步调用javascript,而没有先从javascript端调用插件? (来自JS-&gt; Java的调用会给我一个CallbackContext,我可以使用它来发出回调,我假设。)

我找到了这个 https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/NativeToJsMessageQueue.java 但我不知道如何使用它,我找不到任何文件 - 我甚至不确定它是否有效或是否供公众使用。

我可以使用webview.loadUrl("javascript: ... ");来调用javascript端,还是会破坏或干扰JS中运行的cordova框架(如果有的话)?

是否有推荐的方法来实现这一点,是否支持多个平台(或者是适用于其他平台的概念?)

由于

1 个答案:

答案 0 :(得分:0)

目前我正在使用一种解决方法 - 我让用户调用我的插件(JS-&gt; java),这样他们就会提供他们正在注册的回调函数。

在Java方面,我随后存储CallbackContext以供日后使用。 重要的是,当您使用CallbackContext.sendPluginResult时,您传递的PluginResult必须使用PluginResult.setKeepCallback(true)方法标记,否则第一次回调CallbackContext将导致非常重要上下文对未来的电话无效。

我没有注意到任何线程问题,我不确定(但有希望)它适用于其他平台。