在Cordova 3.6上,使用IOS SDK 8.1,我观察到在调用geolocation.watchPosition之后,我可能会得到1-2个geolocationSuccess结果,或者geolocationError(kCLErrorDomain错误0或超时)。如果我得到1-2个成功结果,那么在错误超时之前不会再发生任何其他事情。错误发生后,没有其他任何事情再次发生。如果我再次调用clearWatch和watchPosition,则重复该过程。
这里发生了什么?我希望继续定期进行geolocationSuccess调用,如果存在geolocationError,那么我至少应该继续获得成功或失败的更新。为什么事件发生停止,我必须通过创建一个新手表来重置它?通过使用我自己的计时器定期调用geolocation.getCurrentPosition,我实际上得到了最好的结果。
我在调试器中注意到,在调用watchPosition之后,位置管理器委托正在记录“locationManager :: didFailWithError(null)”,即使我稍后获得geolocationSuccess。
这种情况发生在运行iOS 8.1的iPhone 6以及运行iOS 6的iPod Touch 4上。
相关代码很简单:
var geoWatchID = navigator.geolocation.watchPosition(geolocationSuccess,
geolocationError, {
maximumAge: 5000,
timeout: 60000,
enableHighAccuracy: true
});