如何使用cordova / phonegap将数据或消息从java应用程序/插件发送到javascript

时间:2014-11-30 23:08:58

标签: cordova phonegap-plugins cordova-plugins

我想我在这里遗漏了一些东西。我习惯于将数据从javascript发送到java,然后使用callbackContext方法执行和返回调用。

但是如果在某些方面,我们说我有一个需要定期向javascript发送数据的正在运行的线程,那我该怎么做呢? (这假设此任务正在运行且未被javascript操作触发,因此没有可用的callbackContext)

2 个答案:

答案 0 :(得分:3)

你可以随时从java执行javascript:

String js = "alert('test')";
webView.loadUrlNow("javascript:" + js);

或者您可以初始化插件并保持回调执行此操作

PluginResult pgRes = new PluginResult(PluginResult.Status.OK, "message");
pgRes.setKeepCallback(true);
callbackContext.sendPluginResult(pgRes);

添加了Sephy提供的示例

private String myCbkId;
// Store callbackId from a call to execute 
@Override public boolean execute(String action, JSONArray arr, CallbackContext cbkCtx) throws JSONException { 

    myCbkId = cbkCtx.getCallbackId(); 
    JSONObject data = arr.getJSONObject(0); 
    String ack = data.getString("data"); // You can acknowledge to the callback for instance and keep it alive 
    Log.d(TAG, "ack".equals(ack) ? "ack !" : "not ack !");

    // These lines can be reused anywhere in your app to send data to the javascript
    PluginResult result = new PluginResult(PluginResult.Status.OK, ack);
    result.setKeepCallback(true);//This is the important part that allows executing the callback more than once, change to false if you want the callbacks to stop firing  
    this.webView.sendPluginResult(result, this.myCbkId); 

    return true; 
}

答案 1 :(得分:0)

如果您需要的是以异步方式从服务器到客户端的通信,那么websockets就是您的解决方案。确切的实现取决于您使用的Web服务器,因此您可以提供更多详细信息,但它们的工作方式或多或少都相同。