我创建了一个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));
}
}
只有setResult
的ActivityCamera有一个新的Intent
avec finish()
;
例如:如果我点击调用该插件的按钮,则没有任何反应。我再次点击,显示警报消息,不再显示(通常是另一个警报)......
你有什么想法吗?
告诉我是否需要更多代码。
编辑:更新Cordova并没有解决问题。
编辑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);
}
}
如果我删除它,第一次调用回调。有问题吗?
答案 0 :(得分:1)
在这种情况下我也遇到了麻烦。
在我的情况下,插件是从标签中触发的,其中在iframe内容中绑定了单击处理程序。 当我移动标签并单击处理程序到父文档时,问题就解决了。
你能尝试这些吗?
答案 1 :(得分:0)
我为我解决了这个问题,希望它适用于其他人。 我正在使用require.js,当我在我的代码中多次调用require(“cordova”)时出现问题,在删除冗余后需要问题消失。
答案 2 :(得分:0)
对我来说,问题只是HTML文档中存在空的iframe标记。删除iframe完全解决了问题。感谢장지윤让我指向了正确的方向。