从cordova插件的本机java部分调用javascript端

时间:2016-07-15 07:34:33

标签: cordova callback cordova-plugins

我写了一个简单的插件来处理nfc标签,因为战车nfc cordova插件不适合我的需要。 我面临的问题是我发现的所有教程似乎都假设我会从javascript方面调用本机方法,如下所示:

cordova.exec(callback, function(err) {}, "myClass", "myMethod", [data]);

事情是我写的插件在检测到TAG_DISCOVERED事件时,它在本机端的onNewIntent方法中是神奇的。这是正常工作,我在adb logCat中获得正确的数据。问题是我不知道如何将数据传递给javascript端。

我知道我应该像这样发送pluginResult:

PluginResult result = new PluginResult(PluginResult.Status.OK, "myData");
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);

但我对javascript方面一无所知,因为本机方是由Android Intent而不是我的客户端触发的。我是一个新手,当涉及到机器人生命周期,因此很困惑。任何帮助都会非常受欢迎。

1 个答案:

答案 0 :(得分:0)

当您从RandomBlob.java调用此函数时:

callbackContext.success(result);

它将在您的.js文件内(通常在Cordova中)在设备就绪的内部调用以下函数。该函数应为:

var app = {
initialize: function () {
    document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
},
onDeviceReady: function () {
    this.receivedEvent('deviceready');
},
receivedEvent: function (id) {
    function success(value) {
        var result = value['result'];
        var arg1 = value['arg1'];
        var arg2 = value['arg2'];
        console.log("Cordova.Exec called to multiply " + arg1 + " & " + arg2 + " which resulted in " + result);
    }
    setTimeout(function () {
        Cordova.exec(success, null, "RandomBlob", "performMultiply", [500, 3]);
    }, 10000);
}
};
app.initialize();

希望这会有所帮助!