我已经创建了cordova-plugin来在Android中进行本机调用。在cordova插件的exec函数中,我有callbackContext,通过它我可以从cordova-plugin调用javascript函数。问题是我无法在一段时间后通过callbackContext调用javascript函数。
public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
throws JSONException {
if (NFC_INIT_ACTION.equals(action)) {
context = this.cordova.getActivity().getApplicationContext();
WalletRuntimeStore.setContext(context);
nfc = NFCService.getInstance();
HelloWorldPlugin(data, callbackContext);
return true;
}
如果我在execute方法中调用HelloWorldPlugin它的工作方式如果我在execute方法之外调用它不起作用...
答案 0 :(得分:1)
这是我的错误,我导致主线程等待,因此没有任何操作在主线程上执行。删除了等待电话&一切都开始奏效了。使用回调上下文的正确方法是使用PluginResult类中提供的setKeepCallback函数。 向javascript发送无结果回调:
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
// some code....
PluginResult result = new PluginResult(PluginResult.Status.NO_RESULT);
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);
// some code....
}
以后(可能是在网络呼叫或任何长期操作之后),可以使用以下命令将回调发送到javascript函数:
PluginResult result1 = new PluginResult(PluginResult.Status.OK, data);
result1.setKeepCallback(true);
callbackContext.sendPluginResult(result1);
我们也可以通过从cordova插件获取webview参考来调用java代码中的javascript函数。通过使用sendJavascript函数。