在iPhone上多次调用PhoneGap navigator.compass.getCurrentHeading

时间:2011-08-23 16:01:08

标签: ios xcode4 cordova

我很感激任何帮助解决这个问题 - 或者至少在哪里寻求解决它。

我所拥有的是调用iPhone navigator.compass.getCurrentHeading(succ,fail),每次设备移动时都会调用成功函数。在XCode调试日志中,我看到为每个移动生成了很多 navigator.compass.setHeading 调用的条目。如果我再次尝试轮询标题数据 - 请求就会挂起。这是代码:

function onBodyLoad() {
    if (typeof navigator.device == "undefined") {
        document.addEventListener("deviceready", onDeviceReady, false);
    } else {
        onDeviceReady();
    }
}

function succ(heading) {
    alert("compass " + heading);
}

function fail() {
    alert('fail');
}

function onDeviceReady() {
    navigator.compass.getCurrentHeading(succ, fail);
}

这是非常奇怪的行为,因为我希望getCurrentHeading只被调用一次并返回一个结果,而不是无法阻挡的一连串事件。

我使用的是PhoneGap 1.0.0。 Android上的相同代码完美无缺。我删除了所有自定义JS代码以防止发生冲突。

1 个答案:

答案 0 :(得分:1)

奇怪的是,没有其他人似乎遇到这个。无论如何,这个(hacky)解决方案可以帮助那些寻找答案的人。

由于此问题,我们不得不停止使用getCurrentHeading,而是将其替换为navigator.compass.watchHeading。在清除手表时,我们还调用navigator.compass.stop()函数以防止进一步指南针垃圾邮件(仅适用于iPhone平台 - Android很好),在再次调用watchHeading之前,我们调用navigator.compass.stop()和navigator.compass .start(),重新初始化指南针“以防万一”(再次,仅限iPhone)。

采取这些措施后,用户罗盘的页面不再挂在第二个条目上,并且此页面之外没有标题垃圾邮件。