cordova 插件调用activity和结果返回

    xiaoxiao2021-03-25  47

    某些插件,需要你开启另一个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);
    转载请注明原文地址: https://ju.6miu.com/read-38276.html

    最新回复(0)