我正在尝试编写一个Cordova插件,它将启动一个线程来定期收集信息。
其中一个信息是在js图层中维护。所以我需要提供一个由本机代码调用的js getter函数。
以下是演示代码:
in js:
var getInfo = function() {
xxxxxxxxxxxxxxx
return jsInfo;
}
// call my plugin
cordova.startCollectInfo(getInfo)
如何调用java代码getInfo
并获取jsInfo的值?
答案 0 :(得分:2)
如果将getInfo()
函数作为成功回调传递给本机插件层,则可以使用setKeepCallback(true)
阻止Cordova在第一次调用后放弃对JS回调的引用,然后存储引用回调上下文,允许您多次调用JS回调以响应您调用的本机线程操作。像这样:
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);
}
}