gpt4 book ai didi

android - Cordova geolocation watchPosition frequency is higher the options allow it

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:12 33 4
gpt4 key购买 nike

在我的 ionic/angularjs 应用程序中,我使用了地理定位插件:https://github.com/apache/cordova-plugin-geolocation

就像在我使用它来配置 watch 的文档中一样:

var watchOptions = {
frequency : 10*1000,
timeout : 60*60*1000,
enableHighAccuracy: true // may cause errors if true
};

watch = navigator.geolocation.watchPosition(on_success,on_error,watchOptions);

但是在 android 上,频率远高于 10 秒(大约 0.5 秒)。在 iOS 上效果很好。这里有什么问题?

最佳答案

根据以下评论更新

geolocation options 中没有可用的频率 参数对于 watchPosition(),因此您传递的任何值都将被忽略。每次 native 位置管理器从 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);

但是,这不会阻止设备更频繁地请求更新,因此会消耗相对大量的电池。

原生安卓LocationManager确实允许您在请求位置时指定更新之间的最短时间,以最大程度地减少电池消耗,但是 cordova-plugin-geolocation在 Android 上不直接使用 LocationManager,而是使用 W3C Geolocation API Specification在 native webview 中,不允许您指定它。

但是,您可以使用此插件来执行此操作:cordova-plugin-locationservices

它将允许您指定:

interval: Set the desired interval for active location updates, in milliseconds.

fastInterval: Explicitly set the fastest interval for location updates, in milliseconds.

关于android - Cordova geolocation watchPosition frequency is higher the options allow it,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294154/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com