PhoneGap / Cordova Camera onResume returns 空对象

PhoneGap / Cordova Camera onResume returns empty object

所以我有一个 Android 的 Cordova 应用程序,它使用官方 Cordova Camera 插件。 Android 在拍照时杀死后台 Cordova 任务后,应用程序使用 onResume 事件恢复应用程序状态。

我正在遵循 Cordova 文档中的最佳实践,但仍然无法正确完成它。当用户拍照时,Android 在后台终止 Cordova 任务,根据文档,相机插件应该 return pendingResult 对象与相机插件状态。但这样的事情根本不会发生。我写了简单的调试代码:

事件是这样添加到应用程序中的:

    function onDeviceReady() {
        document.addEventListener("pause", onPause, false);
        document.addEventListener("resume", onResume, false);

...更多代码....

   function onResume(event) {
        console.log("on resume event fired !!!");
        var storedState = window.localStorage.getItem(APP_STORAGE_KEY);
        if(storedState) {
            appState = JSON.parse(storedState);
            str = JSON.stringify(appState, null, 4);
            console.log("found previously stored state: "+str);
        }
        console.log(JSON.stringify(event, null, 4));
        console.log(event.pendingResult);
}

控制台输出为:

on resume event fired !!! found previously stored state: { "takingPicture": true, "imageURI": "" } { "isTrusted": false, "action": "resume" } undefined

很明显,在重新启动 Cordova 应用程序时会调用 onResume 事件,但 event.pendingResult 并未从官方 Cordova 相机插件中 returned。有什么解决办法吗?

我正在使用 Cordova 7.1.0 和 cordova-plugin-camera 版本 2.4.1,在 LG L90 运行 Android 5.0.2 和 LG G3 运行 Android6.0.

Ps。还尝试像这样将事件侦听器向上移动一级:

function bodyLoad() {
    document.addEventListener("deviceready", onDeviceReady, false);
    document.addEventListener("pause", onPause, false);
    document.addEventListener("resume", onResume, false);
}

仍然没有运气。

终于找到解决办法了。问题是 cordova-plugin-facebook4(这里是版本 1.9.1)。看起来,facebook 插件混淆了 Cordova 恢复回调。 (可以在此处找到更多详细信息:https://github.com/Wizcorp/phonegap-facebook-plugin/issues/1315)。

要修复它,应导航至

\platforms\android\CordovaLib\src\org\apache\cordova\CordovaInterfaceImpl.java

并且在第 134 行有一个 if(callback == null && initCallbackService != null) 应该更改为 if( initCallbackService != null)。就这样,不幸的是调试了3天。