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

标签 java javascript android cordova

我有一个 Cordova 应用程序,使用 Android 上的 native 插件(其他平台即将推出)。

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

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

有什么方法可以从插件的 native 端异步调用 javascript,而无需先从 javascript 端调用插件? (我认为,来自 JS->Java 的调用会给我一个 CallbackContext,我可以用它来发出回调)。

我发现了这个 https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/NativeToJsMessageQueue.java 但我不知道如何使用它,也找不到任何文档 - 我什至不确定它是否有效或是否适合公共(public)使用。

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

是否有推荐的方法来完成此任务,是否支持跨多个平台(或者这些概念是否适用于其他平台?)

谢谢

最佳答案

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

在 Java 端,我存储 CallbackContext供以后使用。 一件重要的事情,当你使用CallbackContext.sendPluginResult时,这一点非常重要。 ,PluginResult您通过的必须标有 PluginResult.setKeepCallback(true)方法,否则第一次回调 CallbackContext 将导致上下文对以后的调用无效。

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

关于java - 是否可以从cordova android插件中运行的后台线程调用javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376279/

相关文章:

java - 我如何使用 java 在 mysql 数据库中根据日期差异(来自另一个表的日期和当前日期)将表中的特定标志更新为 'Y'

javascript - 使用 jQuery UI 消失带有模态消息的元素

javascript - JavaScript 中的输出

javascript - 无法更改 <option> 中的背景颜色

java - 无法在 android :onClick attribute defined on view class. 的父或祖先上下文中找到方法。 AppCompatTextView

android - 如何格式化新的日期选择器?

android - 为 Android 中的 Facebook 应用程序生成 key 哈希

java - 使用带有 lambda 的 Java 8 流来处理 for 循环,调用具有多个参数的方法

java - 部署描述符 - 与 servlet 的实际路径名相关的规则

java - 如何过滤流映射期间抛出异常的元素