【问题标题】:PhoneGap / Cordova Camera onResume returns empty objectPhoneGap / Cordova Camera onResume 返回空对象
【发布时间】:2017-10-21 19:57:02
【问题描述】:

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

我正在遵循 Cordova 文档中的最佳实践,但仍然无法正确完成。当用户拍照时,Android 会在后台终止 Cordova 任务,并且根据文档,相机插件应该返回带有相机插件状态的 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 事件,但不会从官方 Cordova 相机插件返回 event.pendingResult。任何想法如何解决它?

我正在使用 Cordova 7.1.0 和 cordova-plugin-camera 版本 2.4.1,在运行 Android 5.0.2 的 LG L90 和运行 Android 6.0 的 LG G3 上进行了测试。

附言。还尝试像这样将事件侦听器上移一级:

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

仍然没有运气。

【问题讨论】:

    标签: android cordova phonegap onresume


    【解决方案1】:

    终于找到了解决办法。问题是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天的调试时间已经过去了。

    【讨论】:

    • 我爱你,这个答案是金!非常感谢@peterPP1
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2014-09-29
    • 2015-02-11
    相关资源
    最近更新 更多