2012-03-06 60 views
3

我正在开发将当前GPS位置发送到服务器的phonegap应用程序。为了做到这一点,我们有以下代码片段:Phonegap geolocation.watchPosition不更新iPhone上的位置

navigator.geolocation.watchPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, { 
    enableHighAccuracy : true, 
    maximumAge: 4000, //should be default, just in case 
    timeout: 5000 
}); 

回调函数负责提交结果。在我们的Android测试设备上,此功能运行良好。但是,当我们在iOS设备上运行相同的代码时,它通常不会执行任何操作,除非GPS接收良好时它将发送两个坐标,然后停止。

它看起来像iOS只能获取一次信息,并且在有新的坐标可用时从不触发回调函数。

任何有类似经验/解决此问题的人?

+0

从PhoneGap 1.8.1开始,这似乎是固定的。 – ThinkingStiff 2012-07-14 07:39:30

回答

3

我解决了我的问题,如下所示。事实证明,navigator.geolocation.watchPosition似乎不适用于iOS。我重写使用JavaScript setInterval它调用getCurrentPosition每5秒而不是代码:

navigator.geolocation.getCurrentPosition(gpsTracker.onNewCoordinates, gpsTracker.onError, { 
    enableHighAccuracy : true, 
    maximumAge: 4000, // should be default, just in case 
    timeout: 5000 
}); 

现在GPS位置每5秒正确地返回。

+1

出于兴趣,你有没有找到一种方式来运行这个应用程序是最小化/在后台? – Christopher 2012-03-15 09:34:43

+0

在我的应用程序中,我们需要应用程序继续。在某些android设备上,如果屏幕锁定,日志记录会继续。在iOS上,这是可能的。 Matt Raible创建了一个不错的应用程序(http://www.play-more.com),并撰写了一个非常有趣的博客:http://raibledesigns.com/rd/entry/my_html5_with_play_scala – dvtoever 2012-03-15 13:17:27

+0

我会节省您的时间。如果您需要地理位置 或音频等后台服务,则必须使用本地服务。你被迫使用PhoneGap或类似的。他们添加了300毫秒的触摸延迟,并不会支持Web应用程序的后台任务。这是打算。他们希望我们为他们的商店创建本地应用程序。 – kaulusp 2014-07-18 14:43:48

0

看一看这个: http://groups.google.com/group/phonegap/browse_thread/thread/58f7ff98170b16c4 有一些关于geolocator.start()和stop()的内容,为iOS保留。也许这有帮助?

根据我的经验,GPS必须是“热”才能提供有效的位置,也就是说它必须有足够的时间连接到卫星等。通常,只有当你开始观看时,你才有“热”不是如果你只是选择单一职位。在我的HTC上,由getCurrentPositions()获得的值因此变得太不太和谐(与一个近距离范围有关,例如在50米范围内)。所以这可能是再次尝试使用startWatching()找到解决方案的正确方法。