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) 中的代码永远不会被执行,因此 lblBatteryLevellblBatteryPlugged 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 应用程序不会触发与电池相关的事件的主要内容,如果未能解决你的问题,请参考以下文章

在 Adob​​e Phonegap Build 中,Deviceready 未触发

来自phonegap build的.ipa不会安装在iphone上

phoneGap Build 不会复制 icon.png 和 iPhone 的其他图标

iOS 版本中不会触发 Phonegap 插件回调

PhoneGap Deviceready 不会在应用程序首次运行时触发 (iOS)

Build.Phonegap Facebook SDK