当静止时,Apache Cordova geolocation.watchPosition()在iOS上超时

当使用Apache Cordova的cordova-plugin-geolocation,特别是watchPosition()时,我至less在iOS 8.1.3到8.3上遇到困难。 正在发生的事情是,当一个用户正在移动,坐标工作得很好,并不断更新。 但是,当用户停止片刻(比如设置的超时时间)时,会引发超时错误。 第二个用户再次移动坐标正在工作。

我们不能太多地增加超时时间,因为担心用户会合法地失去接受,并且不得不重新logging他们的领域边界(农业应用)。 这就是说我们把超时时间增加到65000,并且仍然设法得到超时消息。

我目前的工作理论是,无论什么原因,如果没有检测到运动,插件会抛出一个超时消息,而不是一次又一次地给我相同的坐标。 我不确定这是否可能是某种省电function或iOS和/或插件的实际错误。

geoWatch = window.navigator.geolocation.watchPosition( gpsChangeCoordinates, function(error){ $("#signal").html("Error: "+error.message); $("#signal").css("background-color","red"); }, {maximumAge:3000, timeout:15000, enableHighAccuracy:true}); ); 

切换到getCurrentPosition()也是无效的,因为除非持续查询GPS,否则精度不会达到并保持在农业用途所需的水平。

这个问题不会在Android上显示。

解决方法是直接修改CDVLocation.m以删除distanceFilter。 或者更具体地说:

 if (enableHighAccurary) { // snipped // self.locationManager.distanceFilter = 5;// original, causes problems standing still self.locationManager.distanceFilter = kCLDistanceFilterNone; //snipped } else { 

通过代码中的评论来判断,这是一个有意识的决定,以节省电池的名义只在用户移动5米或更多米时发送更新。 这对我的用例是有问题的。