Cordova 插件从本机函数获取异步响应
Posted
技术标签:
【中文标题】Cordova 插件从本机函数获取异步响应【英文标题】:Cordova plugin get the async response from native function 【发布时间】:2020-11-08 01:48:23 【问题描述】:就我而言,我想构建一个简单的插件:
-
启动原生页面
(用户输入后)回调到cordova(js)
我没有找到处理回调的方法。 我搜索了科尔多瓦文档(Echo 示例),第一部分非常简单。但是,它没有提到异步回调。
【问题讨论】:
【参考方案1】:您可以通过同步发送“无结果”响应并保留 Cordova 回调来发送异步响应,以便与它一起发送异步结果。 例如:
安卓:
public class MyPlugin extends CordovaPlugin
private static CallbackContext myAsyncCallbackContext = null;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException
if (action.equals("myAsyncFunction"))
// save the callback context
someCallbackContext = myAsyncCallbackContext;
// Send no result for synchronous callback
PluginResult pluginresult = new PluginResult(PluginResult.Status.NO_RESULT);
pluginresult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginresult);
return true;
// Some async callback
public void onSomeAsyncResult(String someResult)
if(myAsyncCallbackContext != null)
// Send async result
myAsyncCallbackContext.success(someResult);
myAsyncCallbackContext = null;
ios:
@interface MyPlugin : CDVPlugin
- (void)myAsyncFunction:(CDVInvokedUrlCommand *)command;
@end
@implementation MyPlugin
static NSString* myAsyncCallbackId = nil;
- (void)myAsyncFunction:(CDVInvokedUrlCommand *)command
// save the id
myAsyncCallbackId = command.callbackId;
// Send no result for synchronous callback
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_NO_RESULT];
[pluginResult setKeepCallbackAsBool:YES];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
// Some async callback
- (void) didReceiveSomeAsyncResult:(NSString *)someResult
if(myAsyncCallbackId != nil)
// Send async result
CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:someResult];
[self.commandDelegate sendPluginResult:pluginResult callbackId:myAsyncCallbackId];
myAsyncCallbackId = nil;
@end
【讨论】:
以上是关于Cordova 插件从本机函数获取异步响应的主要内容,如果未能解决你的问题,请参考以下文章
来自 iOS 4.0.0 中 Native 的 Cordova 插件 Javascript 函数调用
适用于 android 的 Cordova '本机文件选择器'插件不起作用