当前位置: 首页 > 面试题库 >

通过Cordova进行活动回调

岳浩宕
2023-03-14
问题内容

我有一个名为“签名”的活动,我是从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");
             }
     }

签名库

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回调。任何建议。谢谢


问题答案:

首先,缺少一些代码( 执行 方法的返回语句),您必须告诉android / cordova-plugin等待,直到使用 NO_RESULT
PlugInResultsetKeepCallback 将结果发送回您的webview-app 为止 ,否则cordova /
android希望在 execute -method完成后立即获得结果:

Plugin.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());
}

在此处(针对您的插件类)和此处(针对您的签名类)有一个示例。

我的一个:这里和这里。



 类似资料:
  • 我也有类似的问题: CordovaActivity无法解析为Phonegap 3.4中的类型。 意味着,在主类中,不能解析为类型。 然而,我从这里下载了科尔多瓦Android Zip(如评论中所述):https://github.com/apache/cordova-android. 包括来自到我的构建路径。 行: 现在工作正常,但仍然找不到任何名为的扩展类。 我通过以下方式证明: 在未包装的文件

  • 在没有新意图的情况下,如何从通知返回到活动 还有这个 通知单击:活动已打开

  • 问题内容: 我有个简短的脚本,人们不断告诉我,我需要使用Key绑定来移动Jlabel,但我不知道该怎么做。没有人对如何以不使用键侦听器的方式实现键绑定有任何想法,或者如果添加按钮会出现问题? 问题答案: 与大多数事情一样,开始看看教程“ 如何使用键绑定”,几乎所有答案都将基于这些内容。 您可以做这样简单的事情… 正如我反复告诉您或您的同班同学一样,您不应该以这种方式使用组件。相反,您应该遵循自定义

  • 问题内容: 当ORDER BY基于CASE语句时,选择多个ORDER BY列的正确MS SQL语法是什么? 以下对于单列工作正常,但我需要按多列进行排序: 问题答案: 你可以试试这个

  • 问题内容: 我有一个MySql表,我想查询其中 成对 的列在特定集中的行。例如,假设我的表格如下所示: 现在,我希望提取其中 (f1,f2) 对为(’a’,30)或(’b’,20)的行,即行2,3,4。我也希望使用“ IN”样式的过滤器来完成此操作,因为我可能有很多对要提取。如果我尝试类似的方法: 我得到IN子句中为f1和f2指定的值的笛卡尔积,即具有f1 =’a’或’b’的所有可能组合的行,以及

  • 问题内容: 我在JTextfield上输入了一个名称,但是我的表没有过滤任何东西! 我的代码: 问题答案: 您正在呼叫的 构造。它应该如何从filterTF中读取 文本 。我认为您应该从分配给的Action Event Listener调用它,提交(单击)文本时将调用它,如下所示: 如果要使用“根据用户键类型进行过滤”事件,请将键侦听器添加到您要输入过滤字符串的文本字段中。 但是,正如下面的注释所