根据以下 cmets 更新
geolocation options 中没有frequency 参数可用于watchPosition(),因此您传递的任何值都将被忽略。通过watchPosition() 注册的成功回调在每次本地位置管理器从 GPS 硬件接收到位置更新(在enableHighAccuracy=true 的情况下)时被调用,因此它不会在固定的时间间隔内调用。
本地位置管理器(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,而是使用 W3C Geolocation API Specification在本机 webview 中,不允许您指定。
但是,您可以使用此插件来执行此操作:cordova-plugin-locationservices
它将允许您指定:
interval:设置活动位置更新所需的时间间隔,以毫秒为单位。
fastInterval:明确设置位置更新的最快间隔,以毫秒为单位。