【问题标题】:Callback From Activity on CordovaCordova 上的活动回调
【发布时间】:2015-03-17 13:07:47
【问题描述】:

我有一个名为“签名”的活动,我从 CordovaPlugin 中调用它;

插件.java

public boolean execute(String action, JSONArray args,
            CallbackContext callbackContext) throws JSONException
    {
    Intent i = new Intent(context, Signature.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    cordova.startActivityForResult(this,i,90);
}
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        Log.d(TAG, "activity result in plugin: requestCode(" + requestCode + "), resultCode(" + resultCode + ")");
        if(requestCode == 90) {
             if (resultCode == this.cordova.getActivity().RESULT_OK) {
                 Bundle res = intent.getExtras();
                 String result = res.getString("results");
                 Log.d("FIRST", "result:"+result);
                 this.callbackContext
                 .success(result.toString());
             } else {
                 this.callbackContext.error("Error");
             }
     }

签名.java

private void finishWithResult(String result,int status)
{
    Bundle conData = new Bundle();
    conData.putString("results", result);
    Intent intent = new Intent();
    intent.putExtras(conData);
    setResult(status, intent);
    finish();
}

但是,当我调用“cordova.startActivityForResult”函数时,“onActivityResult”会立即自行调用它。我无法通过 finishWithResult 从 Activity 回调。任何建议。谢谢

【问题讨论】:

    标签: java android cordova callback phonegap-plugins


    【解决方案1】:

    首先缺少一些代码(execute 方法的返回语句),您必须告诉 android/cordova-plugin 等到有结果发送回您的 webview-应用程序通过使用 PluginResultNO_RESULTsetKeepCallback 否则 cordova/android 希望在 execute 后立即获得结果-方法已完成:

    插件.java:

    public boolean execute(String action, JSONArray args,
                CallbackContext callbackContext) throws JSONException
        {
    
        PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
        r.setKeepCallback(true);
        callbackContext.sendPluginResult(r);
    
        Intent i = new Intent(context, Signature.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        cordova.startActivityForResult(this,i,90);
    
        return true;
    
    }
    
    public void onActivityResult(int requestCode, int resultCode, Intent intent){
        // here is your former code
        ...
        ...
        // at last call sendPluginResult 
        this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK, result.toString()));
    
        // when there is no direct result form your execute-method use sendPluginResult because most plugins I saw and made recently (Reminder) prefer sendPluginResult to success/error
        // this.callbackContext.success(result.toString());
    }
    

    有一个示例here(用于您的插件类)和here(用于您的签名类)。

    还有我的一个:herehere

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多