第二次插件调用后收到的Cordova插件回调

Cordova plugin callback received after second plugin call

本文关键字:插件 Cordova 回调 调用 第二次      更新时间:2023-09-26

我创建了一个cordova插件(3.3.0),它启动一个活动并等待结果。但是回调(简单的警报)不是调用,直到第二次启动插件。下面是代码:

public boolean execute(String action, final JSONArray args, final CallbackContext cbc) throws JSONException
{
    this.callbackContext = cbc;
    try
    {
        Intent i = new Intent(cordova.getActivity(), ActivityCamera.class);
        this.cordova.setActivityResultCallback(PhotoMokoPlugin.this);
        this.cordova.startActivityForResult(PhotoMokoPlugin.this, i, 0);
        PluginResult pr = new PluginResult(PluginResult.Status.NO_RESULT);
        pr.setKeepCallback(true);
        callbackContext.sendPluginResult(pr);
        return true;
    }
    catch (JSONException e)
    {
        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
        return false;
    }
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);
    try
    {
        callbackContext.success(json.toString()); // Doesn't matter if success or error
    }
    catch (JSONException e)
    {
        callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ERROR));
    }
}

ActivityCamera仅setResult与新的Intent avec finish();

例如:如果我点击一个调用插件的按钮,什么都不会发生。我第二次点击,警报消息显示,没有更多的(通常是另一个警报)…

你有什么想法吗?

如果需要更多代码,请告诉我。

EDIT:更新Cordova没有解决问题。

EDIT 2:问题似乎来自以下代码:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus)
    {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

如果我删除它,回调将第一次被调用。有问题吗?

在这种情况下我也遇到了麻烦。

在我的情况下,插件是从标签触发的,其中点击处理程序绑定,在iframe内容。当我移动一个标签并单击处理程序到父文档时,问题就解决了。

你能像这样试试吗?

我为自己解决了这个问题,希望它能为别人工作。我使用的是require.js,当我在代码中不止一次调用require("cordova")时,问题出现了,在我删除冗余的需求后,问题消失了。

对我来说,问题仅仅是HTML文档中存在一个空iframe标记。删除iframe完全修复了这个问题。谢谢你给我指明了正确的方向。