地理定位在Phonegap中无法停止

7
当我运行时
window.onload = function () {
   document.addEventListener("deviceready", getGeolocation);
}

function getGeolocation() {
 navigator.geolocation.getCurrentPosition( successCallback, errorCallback, {maximumAge: 0});
}
function getGeolocation() {
 watchGeoMarkerProcess = navigator.geolocation.watchPosition(updateCallback, errorCallback);
}

并且,然后。
function updateCallback(position) {
   if (position.coords.accuracy < 100) {
            navigator.geolocation.clearWatch(watchGeoMarkerProcess);
   }
}

我的iOS 5应用使用phonegap时似乎卡住了,因为地理位置指示图标停留在顶部状态栏中并且一直没有消失,这意味着GPS没有关闭。此外,有时我根本无法获取坐标,会抛出超时错误。

我认为代码没有问题,因为作为Web应用程序可以正常工作。

有什么想法吗?


FYI,这在最新的Cordova中似乎不是个问题(炫酷)。我现在使用ondevicereadywatchPosition+ clearWatch可以正常工作了。 - jenswirf
3个回答

3

navigator._geo 是我认为的“真正”的实现。我看到最近的 git 提交中他们试图覆盖 navigator.geolocation 但在 iOS 平台上无法成功。查看 PhoneGap 源代码使我想尝试调用真正的方法。

这是 git 提交记录: http://mail-archives.apache.org/mod_mbox/incubator-callback-commits/201203.mbox/%3C20120307000809.B82AA5D82@tyr.zones.apache.org%3E

这是另一个关于问题的线程: https://groups.google.com/forum/?fromgroups#!topic/phonegap/W32yYpV28W8

更新: 我现在有了一定的成功: 编辑你的 phonegap.js,把第3451-3453行注释掉,它看起来像这样: __proxyObj(navigator.geolocation, navigator._geo,...

你将得到一个丑陋的权限提示.. 但位置应该能工作。更改背后的原理是现在你将使用 safari 的位置检测,而不是 PhoneGap 的。

更新2: ..而 PhoneGap 的问题最终证明是与另一个 JavaScript 库 dragdealer.js 的冲突造成的。因此请仔细检查您正在使用的任何其他 JavaScript 中是否有任何可疑的变量名称,如“Location”或“Position”。由于某种原因,这种冲突在 iOS 以外的平台上不是问题。


以下是针对wije的回复: - Ryan
谢谢您的关注。很遗憾这导致了另一个大问题,这意味着我实际上不能使用它。至于JS冲突,对我来说这不是问题,因为我根本没有使用任何库。 - jenswirf

1

说实话,我也遇到了同样的问题,但这些解决方法并没有起作用。但它们可能对你有用:

  • 确保在 onDeviceReady() 被调用后获取位置
  • 尝试使用 navigator._geo.getCurrentPosition

那个 navigator._geo.getCurrentPosition 的解决方案还有更多内容吗?那似乎是我没有的一些自定义方法。 - jenswirf

0

我曾经遇到过同样的问题,不过是在安卓上。

添加 enableHighAccuracy 选项后,问题得以解决:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy:true} );

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接