更新了的意見光低於
沒有frequency
參數在geolocation options可供watchPosition()
因此你傳遞任何值將被忽略。每當本機位置管理器從GPS硬件接收位置更新時(在enableHighAccuracy=true
的情況下),就會調用通過watchPosition()
註冊的成功回調,因此不會以固定間隔調用。
本地位置管理器(Android和iOS)都是事件驅動的,即它們從GPS硬件接收更新,並以非固定時間間隔傳送它們。因此,嘗試將固定頻率應用於此,試圖在圓孔中安裝一個方形的掛釘 - 您無法要求GPS硬件爲您提供精確的位置更新N秒。
雖然您可以按固定的時間間隔撥打getCurrentPosition()
,但此方法只是返回上次收到的位置或請求新的位置。
如果問題是更新過於頻繁,您可以記錄每次更新的時間,並且只接受N秒後的下一次更新,例如,
var lastUpdateTime,
minFrequency = 10*1000,
watchOptions = {
timeout : 60*60*1000,
maxAge: 0,
enableHighAccuracy: true
};
function on_success(position){
var now = new Date();
if(lastUpdateTime && now.getTime() - lastUpdateTime.getTime() < minFrequency){
console.log("Ignoring position update");
return;
}
lastUpdateTime = now;
// do something with position
}
navigator.geolocation.watchPosition(on_success,on_error,watchOptions);
但是,這樣不會停止更頻繁地請求更新的設備,因此會消耗相對大量的電池。
原生的Android LocationManager不會允許你以儘量減少電池消耗,但是在Android cordova-plugin-geolocation不直接實現使用的LocationManager請求位置時指定更新之間的最短時間,而是使用在本地web視圖的W3C Geolocation API Specification,這不允許你指定這個。
但是,你可以使用這個插件來做到這一點:cordova-plugin-locationservices
它可以讓你指定:
間隔:爲主動的位置更新所需的時間間隔,以毫秒爲單位。
fastInterval:顯式設置位置更新的最快時間間隔(以毫秒爲單位)。
有沒有對應於'cordova-plugin-locationservices' for iOS?我能想到的解決方法是圍繞默認的'watchPosition'創建自己的包裝,根據您提供的'frequency'值調用'watchPosition'和'clearWatch'。 – cr8ivecodesmith
謝謝!但是,在你的示例代碼中,我認爲一行不正確,應該是:if(lastUpdateTime && now.getTime() - lastUpdateTime.getTime()