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

Posted

技术标签:

【中文标题】PhoneGap navigator.compass.getCurrentHeading 在 iPhone 上多次调用【英文标题】:PhoneGap navigator.compass.getCurrentHeading called multiple times on 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 代码以防止发生冲突。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于PhoneGap navigator.compass.getCurrentHeading 在 iPhone 上多次调用的主要内容,如果未能解决你的问题,请参考以下文章

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)

Phonegap : 浮动气泡通知,如 Phonegap 中的 facebook messenger

phonegap build + phonegap-cli + ionic 图标

PhoneGap - Android - 在 phonegap 中滑动导航

PhoneGap / Cordova 回调错误 - 在 PhoneGap 中未执行 RestKit 完成功能

Cordova/Phonegap:无法让 Facebook Phonegap 插件工作