我开发了一个ionic-cordova项目。我需要多次执行cordova回调。
以下是我的组件代码:
let data =JSON.parse(JSON.stringify(this.someOptions))
this.customService.TestFunction(data).then(response => {
console.log(response);
})
.catch(ex => {
// console.log(ex)
})
}
这是我的CustomService
TestFunction(arg1: any): Promise<any> {
var temp = cordova(this, "TestFunction", { callbackStyle: "object" }, [arg1]);
return temp
}
下面是js代码
exports.TestFunction = function (arg0, success, error) {
exec(success, error, 'SomeCordovaPlugin', 'TestFunction', [arg0]);
};
下面是Android的Java代码
public class SomeCordovaPlugin extends CordovaPlugin {
private CallbackContext testCallbackContext;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("TestFunction")) {
this.TestFunction(args, callbackContext);
return true;
}
return false;
}
private void TestFunction(JSONArray args, CallbackContext callbackContext) {
testCallbackContext=callbackContext;
if (args != null) {
try {
for(int i=0;i\<7;i++){
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK ,testCallbackContext.getCallbackId());
pluginResult.setKeepCallback(true); // keep callback
testCallbackContext.sendPluginResult(pluginResult);
}
} catch (Exception ex) {
testCallbackContext.error("An error occured:" + ex);
}
}
}
}
我想多次调用cordova exec。pluginResult.setKeepCallback(true)对我不起作用。我正在使用ionic 6和cordova 11。如何多次调用cordova exec?
1条答案
按热度按时间pwuypxnk1#
如果我理解你的问题是正确的,你有一个自定义的cordova插件,你从你的js端调用。然后你想从你的插件返回结果到js世界多次,而不是一次。
问题是插件调用的生命周期是通过调用
sendPluginResult()
来完成的我已经解决了这个问题,不使用
sendPluginResult()
将返回值传输到JS,而是直接通过WebView调用JS函数:**1.**在JS中设置一个自定义函数,该函数将从您的插件中调用,并在自定义插件的对象上显示结果值,如:
使用和的值
**2.**将callbackContext持久化在自定义插件中,以最终完成调用,就像您已经通过调用
sendPluginResult()
完成的那样**3.**在调用插件函数时,不要调用
sendPluginResult()
,而是直接提示webview处理JS代码,在此您调用了之前在1.定义的回调函数webView.sendJavascript("cordova.plugins.<pluginPackage>.<CustomPlugin>.<CustomCallbackFunction>('" + <your payload as JSON string> + "')")
(Kotlin代码)**4.**最后,当您完成多次呼叫回呼时,请在持续的callbackContext状态OK上呼叫
sendPluginResult()
,以完成插件呼叫。