cordova 插件调用activity和结果返回

某些插件,需要你开启另一个activity,然后返回cordova的activity,并得到结果。

下面是两种情形:

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

  1. 第一步:
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);


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

  1. 第二步:
    在 插件类中重写下面的方法, 在这个方法中可以得到结果。
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent intent)


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

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

  1. Other otherObject = new Other(cordova.getActivity()); //传入context,other类调用了跳转activity的方法
  2. 插件类调用 cordova.setActivityResultCallback(CordovaPlugin plugin);//设置返回结果时调用此插件中的onActivityResult方法
  3. 在插件类中重写方法: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);


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值