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天。
所以我有一个 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天。