cordova 插件 - 将 js 函数传递给 native 代码

标签 cordova cordova-plugins

我正在尝试编写一个 Cordova 插件,它将启动一个线程来定期收集信息。

其中一个信息是在 js 层维护的。所以我需要提供一个js getter函数来由 native 代码调用。

这里是演示代码:

in js:
var getInfo = function() {

  xxxxxxxxxxxxxxx

  return jsInfo;
}

// call my plugin
cordova.startCollectInfo(getInfo)

如何让java代码调用getInfo并获取jsInfo的值?

最佳答案

如果将 getInfo() 函数作为成功回调传递给原生插件层,则可以使用 setKeepCallback(true) 来阻止 Cordova 丢弃对第一次调用后的 JS 回调,然后存储对回调上下文的引用,允许您多次调用 JS 回调以响应调用的 native 线程操作。像这样的事情:

myplugin.js:

var getInfo = function(jsInfo) {

  xxxxxxxxxxxxxxx

  return jsInfo;
}

var getInfoError = function(error){
    console.error("An error occurred: " + error);
}

// call my plugin
cordova.exec(getInfo,
    getInfoError,
    'MyPlugin',
    'startCollectInfo',
[]);

MyPlugin.java

public class MyPlugin extends CordovaPlugin{
    private CallbackContext getInfoCallbackContext;

    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if (action.equals("startCollectInfo")){
            this.getInfoCallbackContext = callbackContext;
            PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
            r.setKeepCallback(true);
            callbackContext.sendPluginResult(r);
        }
        return true;
    }

    public void onSomeThreadOperationResult(String[] someResults){
        String jsInfo = convertToJson(someResults);
        PluginResult r = new PluginResult(PluginResult.Status.OK, jsInfo);
        r.setKeepCallback(true);
        this.getInfoCallbackContext.sendPluginResult(r);
    }
}

关于cordova 插件 - 将 js 函数传递给 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37917460/

相关文章:

Cordova 中的 Swift 插件导致 EXC_BAD_ACCESS

javascript - Phone Gap 是否能够将 php web 应用程序转换为 iphone/android 应用程序?

javascript - Cordova 后退按钮中断应用程序

javascript - 如何监听两个加载事件?

javascript - Cordova + RequireJS : How load the File-Plugin

angularjs - ios和黑莓中的Cordova inAppBrowser插件问题

javascript - 300ms 延迟消除 : using fastclick. js 与使用 ontouchstart

android - 触摸设备上的嵌入式 youtube 视频自动显示右键单击上下文菜单

cordova - Ionic socialSharing 插件不适用于 iOS

cordova - 开发 cordova 插件时如何处理文件同步噩梦?