我正在开发一个将当前GPS位置发送到服务器的phonegap应用程序。为此,我们有以下代码片段:
navigator.geolocation.watchPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, {
enableHighAccuracy : true,
maximumAge: 4000, //should be default, just in case
timeout: 5000
});
回调函数负责提交结果。在我们的Android测试设备上,这个功能很好用。然而,当我们在iOS设备上运行相同的代码时,它通常什么也不做,除非GPS接收正常,它将发送两个坐标然后停止。
看起来iOS只获取一些信息,并且在有新坐标时从不触发回调函数。
对此问题有相似经验/解决方案的人?
答案 0 :(得分:3)
我解决了我的问题如下。事实证明,navigator.geolocation.watchPosition
似乎在iOS上运行不佳。我使用javascript setInterval
重新编写代码,该代码每5秒调用一次getCurrentPosition
:
navigator.geolocation.getCurrentPosition( gpsTracker.onNewCoordinates, gpsTracker.onError, {
enableHighAccuracy : true,
maximumAge: 4000, // should be default, just in case
timeout: 5000
});
现在每5秒钟正确返回GPS位置。
答案 1 :(得分:0)
看看这个: http://groups.google.com/group/phonegap/browse_thread/thread/58f7ff98170b16c4 有一些关于geolocator.start()和stop()的内容,为iOS保留。也许这有帮助吗?
根据我的经验,GPS必须“热”才能提供有效位置,即必须有足够的时间连接到卫星等。通常,只有在你开始观看时它才会“热”,而不是如果你只选择单一职位。因此,在我的HTC上,getCurrentPositions()获得的值太过于不精确(与近距离相关,例如在50米内)。因此,尝试使用startWatching()找到解决方案可能是正确的方法。