Android 在startActivityForResult之后立即调用Cordova onActivityResult,结果_被取消

Android 在startActivityForResult之后立即调用Cordova onActivityResult,结果_被取消,android,cordova,Android,Cordova,在下面的代码中,当onActivityResult被立即调用时,结果_被取消 正如在其他答案中所建议的那样,我在startActivityForResult()和PluginResult#setKeepCallback(true)之前添加了setActivityResultCallback;。但没有什么能帮上忙。 有什么建议吗 .... public boolean execute(String action, CordovaArgs args, CallbackContext callb

在下面的代码中,当onActivityResult被立即调用时,结果_被取消

正如在其他答案中所建议的那样,我在startActivityForResult()和PluginResult#setKeepCallback(true)之前添加了setActivityResultCallback;。但没有什么能帮上忙。 有什么建议吗

 ....
  public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {

    this.callbackContext  = callbackContext;

    if (action.equals(ACTION_OPEN))
    {
        if(PermissionHelper.hasPermission(this, READ))
        {
            chooseFile();
        }
     }
    else
    {
        return false;
    }

    return true;
}

  public void chooseFile() {

    final CordovaPlugin plugin = (CordovaPlugin) this;
    Runnable worker = new Runnable() {
        public void run() {
            Intent filePickerIntent = new Intent(Intent.ACTION_PICK);
            filePickerIntent.setType("image/*");
            plugin.cordova.setActivityResultCallback(plugin);
            plugin.cordova.startActivityForResult(plugin, Intent.createChooser(filePickerIntent,"Choose file"), PICK_FILE_REQUEST);
        }
    };
    this.cordova.getThreadPool().execute(worker);
    PluginResult r = new PluginResult(PluginResult.Status.NO_RESULT);
    r.setKeepCallback(true);
    callbackContext.sendPluginResult(r);

}

 public void onActivityResult(int requestCode, int resultCode, Intent data) {

    Log.d(TAG,"Enter onActivityResult");

    if (requestCode == PICK_FILE_REQUEST) {

        Log.d(TAG,"requestCode == PICK_FILE_REQUEST");

        if (resultCode == Activity.RESULT_OK) {

            Log.d(TAG,"Result Ok");

            Uri uri = data.getData();
            Log.d(TAG, uri.toString());

        } else if (resultCode == Activity.RESULT_CANCELED) {

            Log.d(TAG,"Result canceled");

            callbackContext.error("OPERATION_CANCELLED");
            return;
        }

        this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR, "UNKNOWN_ERROR"));
    }
}

在安装cordova插件后台模式后,我的应用程序遇到了类似的问题。对我来说,这个问题存在于安卓4.4.2上,而不是安卓6.0上。为了解决这个问题,我在config.xml中设置了参数AndroidLaunchMode

<preference name="AndroidLaunchMode" value="singleTop" />


我在一个cordova应用程序中遇到了同样的问题。我找不到错误的来源,但我通过创建新项目并再次安装所有插件来解决它。它起作用了。

您不应该使用
setActivityResultCallback()
方法

如果您签入,您将发现
setActivityResultCallback
是一个内部方法,其目的是在上一个活动尚未完成时,使用
RESULT\u cancelled
参数调用
onActivityResult


setActivityResultCallback
应该是Cordova代码中的一个私有方法,以避免此类错误。

您在@dpaksoni找到解决方案了吗?我也尝试了同样的方法,效果很好。但仍不清楚上一个项目中的问题是什么。