PhoneGap Build 应用程序不会触发与电池相关的事件
Posted
技术标签:
【中文标题】PhoneGap Build 应用程序不会触发与电池相关的事件【英文标题】:PhoneGap Build application doesn't fire battery-related events 【发布时间】:2013-07-22 06:54:55 【问题描述】:我有一个phonegap-bootstrap
project at GitHub——一个用PhoneGap 2.9 编写的演示应用程序。我已经为 PhoneGap 支持的每个事件放置了事件处理程序。除了与电池相关的事件之外,它们都可以毫无问题地触发。
我更加确定,这是因为缺少许可,但事实证明这是错误的假设。
所以...谁能告诉我,下面的代码有什么问题:
var app =
init: function()
document.addEventListener('deviceready', app.deviceReadyHandler, false);
app.writeEventLog('app.init();');
,
deviceReadyHandler: function()
document.addEventListener('batterylow', app.batteryLowHandler, false);
document.addEventListener('batterystatus', app.batteryStatusHandler, false);
document.addEventListener('batterycritical', app.batteryCriticalHandler, false);
,
batteryLowHandler: function(info)app.batteryHandler('low', info);,
batteryStatusHandler: function(info)app.batteryHandler('status', info);,
batteryCriticalHandler: function(info)app.batteryHandler('critical', info);,
batteryHandler: function(type, info)
$('#lblBatteryLevel').html(info.level + '%');
$('#lblBatteryPlugged').html((info.isPlugged) ? 'yes' : 'no');
app.writeEventLog('app.battery' + event + 'Handler(level = ' + info.level +', isPlugged = ' + info.isPlugged + ');');
app.init();
出于某种原因,超出我的想象,PhoneGap Build 应用程序没有触发与电池相关的事件。而且只有那些与电池有关的。
与电池相关的事件永远不会被触发,并且“全局”(通用)电池处理程序 (batteryHandler
) 中的代码永远不会被执行,因此 lblBatteryLevel
和 lblBatteryPlugged
div 保持其初始值(“[等待]”)。
所有其他事件处理程序的编码方式完全相同。声明于deviceReadyHandler
:
document.addEventListener('pause', app.pauseHandler, false);
document.addEventListener('resume', app.resumeHandler, false);
document.addEventListener('online', app.onlineHandler, false);
document.addEventListener('offline', app.offlineHandler, false);
document.addEventListener('menubutton', app.menuButtonHandler, false);
document.addEventListener('searchbutton', app.searchButtonHandler, false);
然后只定义为日志写入事件:
/**
* Demo purpose only events.
*/
pauseHandler: function()app.writeEventLog('app.pauseHandler();');,
resumeHandler: function()app.writeEventLog('app.resumeHandler();');,
onlineHandler: function()app.writeEventLog('app.onlineHandler();');,
offlineHandler: function()app.writeEventLog('app.offlineHandler();');,
menuButtonHandler: function()app.writeEventLog('app.menuButtonHandler();');,
searchButtonHandler: function()app.writeEventLog('app.searchButtonHandler();');,
除了电池相关的之外,所有这些都会着火。
我更加确定,这是因为缺少权限,但我三次检查,<feature name="http://api.phonegap.com/1.0/battery"/>
行放在我的config.xml
文件中。
我在PhoneGap Build Get Satisfaction 论坛上尝试了asking 的人,但没有得到任何建议,可能有什么问题。
我创建了一个jsFiddle,其中HTML
部分包含我的整个config.xml
文件,javascript
部分包含我的Javascript 代码中的大部分部分,这些部分与电池相关。也许有人有一些时间,审查它。我在那里找不到任何错误,并且与电池相关的代码仍然无法正常工作。
【问题讨论】:
你解决了吗,trejder? @zok:你指的是我一年前问过的问题,现在我不记得了。然而,我的phonegap
repo at Bitbucket 确实包含battery
演示应用程序(以及其他),据我所知运行良好。所以,我们可以假设,我已经解决了一般的电池问题,虽然我现在不知道,我做了什么来解决它? :]
【参考方案1】:
把所有东西都放在 deviceReadyHandler 函数中。我认为电池事件甚至在设备准备好之前就被调用了。
【讨论】:
您所写的内容似乎与PhoneGap API Documentation 背道而驰,其中明确指出:“应用程序通常应该在 deviceready 事件触发后使用 window.addEventListener 来附加事件侦听器”。 document.addEventListener("deviceready", onDeviceReady, false); 引用我自己的问题:“所有其他事件处理程序的编码方式完全相同。在deviceReadyHandler
中声明”。我们在说啥啊?你告诉我要做什么,已经做了什么?【参考方案2】:
为您的项目添加电池状态插件。
打开命令提示符
cd your_project_dir
phonegap 本地插件添加 org.apache.cordova.battery-status
【讨论】:
如果我询问使用核心 API 解决此问题的问题,添加插件的原因是什么?我不想在这里使用任何插件。 Cordova/Phonegap 3.x 核心 api 具有最少的设备功能集。一些功能应该作为插件添加。见docs.phonegap.com/en/edge/… 很好,但这个问题是关于用 PhoneGap 2.9 编写的代码。 PhoneGap 3 发生了很多(真的很多)事情。【参考方案3】:我的phonegap-battery
repo at GitHub 包含battery
演示应用程序,似乎可以正常工作。
看起来,我已经解决了电池问题,虽然我现在不记得我做了什么来解决它。
我只记得,在 PhoneGap Build 社区/PGB GetSatisfaction 论坛的帮助下,我设法找到了问题所在,并修复了电池演示应用程序以使其完全可操作。
【讨论】:
以上是关于PhoneGap Build 应用程序不会触发与电池相关的事件的主要内容,如果未能解决你的问题,请参考以下文章
在 Adobe Phonegap Build 中,Deviceready 未触发
来自phonegap build的.ipa不会安装在iphone上
phoneGap Build 不会复制 icon.png 和 iPhone 的其他图标