您的位置:首页 > 其它

cordova 插件调用activity和结果返回

2017-03-13 08:55 323 查看
某些插件,需要你开启另一个activity,然后返回cordova的activity,并得到结果。

下面是两种情形:

一、 直接在插件类中使用 跳转activity

第一步:

public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);


说明:这个方法是继承CordovaPlugin基类后的cordova成员变量的方法。用法和普通的activity一样,只不过第一个参数必须为 CordovaPlugin 或者其子类。

第二步:

在 插件类中重写下面的方法, 在这个方法中可以得到结果。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent)


二、插件类中使用了另一个other类,传入了context参数后,other跳转activity

此时,如果想要activity返回结果还是在插件类中得到。则步骤是:

Other otherObject = new Other(cordova.getActivity()); //传入context,other类调用了跳转activity的方法

插件类调用 cordova.setActivityResultCallback(CordovaPlugin plugin);//设置返回结果时调用此插件中的onActivityResult方法

在插件类中重写方法:onActivityResult(int requestCode, int resultCode, Intent intent)

cordova 结果回调重复调用

另外,比如做一个搜索蓝牙的插件,由于结果不是一次性给出的,可能隔一会就搜到一个蓝牙设备,需要把结果传给js层,此时如果直接反复去调用mCallbackContext.success(“device:”+name);或者mCallbackContext.error(“失败”);会报错。

查看cordova 发送结果回调的实现:

public void sendPluginResult(PluginResult pluginResult) {
synchronized (this) {
if (finished) {
Log.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());
return;
} else {
finished = !pluginResult.getKeepCallback();
}
}
webView.sendPluginResult(pluginResult, callbackId);
}


所以用下面的方法可以反复通知js层,使得js层获得信息。

PluginResult pluginResult = new PluginResult(PluginResult.Status.OK,"中间消息");
pluginResult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginResult);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cordova
相关文章推荐