【问题标题】:PhoneGap navigator.compass.getCurrentHeading called multiple times on iPhonePhoneGap navigator.compass.getCurrentHeading 在 iPhone 上多次调用
【发布时间】:2011-08-23 16:01:08
【问题描述】:

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

我在 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 代码以防止发生冲突。

【问题讨论】:

    标签: ios xcode4 cordova


    【解决方案1】:

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

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

    采取这些措施后,用户指南针的页面在第二次进入时不再挂起,并且该页面之外没有标题垃圾邮件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多