所以我有一个适用于 Android 的 Cordova 应用程序,它使用官方 Cordova 相机插件。 Android 在拍照时杀死后台 Cordova 任务后,应用程序使用 onResume 事件来恢复应用程序状态。
我正在遵循 Cordova 文档中的最佳实践,但仍然无法正确完成它。当用户拍照时,Android 会在后台终止 Cordova 任务,并且根据文档,相机插件应返回带有相机插件状态的挂起结果对象。但这样的事情根本没有发生。我写了简单的调试代码:
事件被添加到应用程序中,如下所示:
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);
}
控制台输出为:
恢复事件被触发!
找到之前存储的状态:
{
“拍照”:真实,
“图像URI”:“”
}
{
“isTrusted”:假,
“行动”:“恢复”
}
未定义
很明显,当 Cordova 应用程序重新启动时,会调用 onResume 事件,但 event.pendingResult 不会从官方 Cordova 相机插件返回。有什么解决办法吗?
我使用的是 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);
}
但仍然没有运气。
最佳答案
终于找到解决办法了。问题是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 天的调试已经过去了。
关于android - PhoneGap/Cordova 相机 onResume 返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46867486/