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 中滑动导航