[android]科尔多瓦地理定位 watchPosition 频率是高于选项允许它

标签: Android AngularJS
发布时间: 2017/3/17 20:35:00
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在我离子的 angularjs/ application 我使用地理定位插件︰ https://github.com/apache/cordova-plugin-geolocation

像在文档中我使用此向导配置表︰

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 的伟大工程。这里的问题是什么?

解决方法 1:

根据下面的评论更新

有没有 frequency 参数中地理位置选项可用 watchPosition() 因此传递任何值将被忽略。成功回调注册通过 watchPosition() 是调用每个 time 本机 location 经理从 GPS 硬件接收位置更新 (的情况下 enableHighAccuracy=true ) 所以它不是一个固定的间隔。

本机 location 经理 (两个 Android 和 iOS) 是事件驱动的即他们接收来自作为 GPS 硬件的更新,当它提供他们在非固定的时间间隔。因此试图将一个固定的频率应用于这尝试适合方枘圆凿 — — 你不能要求 GPS 硬件交付你 location 完全过 N 秒更新一次。

尽管你可以调用 getCurrentPosition() 在固定的时间间隔,这种方法只是返回最后一个接收的位置或请求一个新。

如果问题是更新的太频繁,你可以 log time 每次更新时,收到和只接受下一次更新后 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 并允许您指定最低 time 更新请求时之间 location 为了尽量减少电池消耗,然而科尔多瓦-插件-地理Android 不执行使用 LocationManager 直接,而是在本机使用W3C 地理位置 API 规范 webview ,它不允许您指定这。

但是,你可以使用这个插件来做到这一点︰科尔多瓦-插件-locationservices

它将允许您指定︰

间隔︰ 设置活动的所需时间间隔 location 更新,以毫秒为单位。

fastInterval︰ 显式设置的最快时间间隔 location 更新,以毫秒为单位。

官方微信
官方QQ群
31647020