2012-03-16 54 views
7

停止当我运行地理位置并不在PhoneGap的

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应用程序工作得很好。

任何想法?

+0

FYI,这似乎是在最新的科尔多瓦(FTW)一个非问题。现在使用'ondeviceready'和'watchPosition' +'clearWatch'工作正常。 – jenswirf 2012-03-30 09:45:22

回答

3

navigator._geo是“真正”的实施我相信。我见过最近的git提交,他们试图超越navigator.geolocation,但显然在iOS上失败。看着phonegap的源代码给我的想法,而不是尝试真正的电话。

这里是git的承诺: http://mail-archives.apache.org/mod_mbox/incubator-callback-commits/201203.mbox/%[email protected]%3E

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

更新:我有现在的成功一定程度: 编辑您的phonegap.js,注释掉线3451-3453看起来像这样: __proxyObj(navigator.geolocation,navigator._geo,...

你会得到一个丑陋的许可警报..但位置应该工作。变化是你现在将使用safari的位置检测功能,而不是PhoneGaps。

UPDATE2:..与PhoneGap的问题竟然是与另一个JavaScript库,在这种情况下dragdealer.js冲突。因此,请仔细检查任何其他您正在使用的JavaScript中的“位置”或“位置”等可疑变量名称。由于某些原因,这种冲突在iOS以外的平台上不成问题。

+0

这应该是在回复wije下面。 – Ryan 2012-03-23 16:14:41

+0

谢谢你看看。太糟糕了,导致另一个大问题,这意味着我不能真正使用它。至于JS冲突,至少对我来说这是一个非问题,因为我根本没有使用任何库。 – jenswirf 2012-03-26 11:19:45

1

对于什么值得我有同样的问题,这些修复程序无法正常工作。但他们可能对你:

  • 确保你的位置onDeviceReady()被调用后
  • 尝试使用navigator._geo.getCurrentPosition
+0

那里有更多的navigator._geo.getCurrentPosition解决方案吗?这似乎是一些自定义的方法,我没有.. – jenswirf 2012-03-23 14:52:30

0

我有同样的问题,虽然在Android上。

添加enableHighAccuracy选项导致它开始工作:

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