Javascript Cordova:尝试为ID:Camera发送第二次回调

Javascript Cordova:尝试为ID:Camera发送第二次回调,javascript,android,jquery,ios,cordova,Javascript,Android,Jquery,Ios,Cordova,我正在开发一个应用程序来收集技术问题。对于每个问题,可以将6个图像上载到服务器。问题如下: 启动应用程序后,我将打开一期(可以是第一期、第四期或第五期),然后导航到照片页面。现在我可以启动相机或启动gallery(按按钮)从中选择照片。这对一张、两张、甚至三张或四张照片都非常有效 现在,当我导航回问题列表时,打开另一个问题并导航到照片页面,我尝试按“从库中选择”或“相机”按钮。按下相机按钮后,我可以使用相机应用程序创建一张新照片,但提交照片时,我只收到一个警报:“相机已取消。”。与从多媒体资料中

我正在开发一个应用程序来收集技术问题。对于每个问题,可以将6个图像上载到服务器。问题如下:

启动应用程序后,我将打开一期(可以是第一期、第四期或第五期),然后导航到照片页面。现在我可以启动相机或启动gallery(按按钮)从中选择照片。这对一张、两张、甚至三张或四张照片都非常有效

现在,当我导航回问题列表时,打开另一个问题并导航到照片页面,我尝试按“从库中选择”或“相机”按钮。按下相机按钮后,我可以使用相机应用程序创建一张新照片,但提交照片时,我只收到一个警报:“相机已取消。”。与从多媒体资料中选择图像相同:我按下按钮,在选择窗口打开之前,我收到“选择已取消”的警报。在此之后,大多数JavaScript不再工作。我无法导航回问题列表,甚至无法从菜单关闭应用程序

如果我查看错误日志,我会得到以下行的错误:

12-18 09:02:45.015 1748-1748/com.app.mosiris W/CordovaPlugin: Attempted to send a second callback for ID: Camera1583519487
12-18 09:02:45.015 1748-1748/com.app.mosiris W/CordovaPlugin: Result was: "Selection cancelled."
12-18 09:02:45.015 1748-1748/com.app.mosiris W/CordovaInterfaceImpl: Got an activity result, but no plugin was registered to receive it.
按“从图库中选择”按钮时,甚至没有选择图像,我收到“选择已取消”警报

因此,据我了解:

navigator.camera.getPicture(success, fail, {quality: 20, allowEdit: true, sourceType: src, destinationType : Camera.DestinationType.DATA_URL});
在第一个选定的问题上工作正常,但在打开另一个问题时,即使未选择任何文件,它也会运行失败功能

有人能给我一个正确方向的想法或提示吗

先走一步

PS:Cordova是5.3.1,摄像头插件也是最新的代码。

可能的原因: 1.根据设备的不同,您获取的url-s可能试图写入同一位置,但失败。 2.设备内存不足 3.级联回调未正确处理

如果您发布代码,可能会更容易帮助您。最近,我在爱奥尼亚市场上遇到了这个问题,我对使用它感到非常敬畏,我建议你看看它,看看你的问题。该插件提供了多个callId,用于区分第二个回调问题未发生的每个调用

解决方案:

platforms\android\CordovaLib\src\org\apache\cordova\CordovaPlugin.java
返回false
更改为
true

public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
    return true;
}
“尝试为ID:Camera1583519487发送第二次回调” 这是因为您使用相同的callbackID在同一个回调中。 您可以更改callbackID,然后重复执行回调。 我的代码解决了这个问题(我认为:使用不同的回调ID):

if (startCallbackContext != null) {
            PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, volume);
            if(isLastGloble == true){
                pluginResult.setKeepCallback(false);
            }
            else{
                pluginResult.setKeepCallback(true);
                webView.sendPluginResult(pluginResult, startCallbackContext.getCallbackId());

                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println(df.format(new Date()));// new Date()为获取当前系统时间
                System.out.println("---------->>>"+"onVolumeChanged... "+volume+" ..."+startCallbackContext.getCallbackId());

                xxxxx.this.webView.sendPluginResult(new PluginResult(
                        PluginResult.Status.OK, volume), df.format(new Date()));
            }
        }