为什么我的应用位置的更新速度是我指定的两倍?

时间:2011-10-03 23:08:27

标签: android location

在我的应用程序中,我已经设置了一个位置管理器,每10分钟更新一次当前位置(或者我认为)。相反,我每5分钟收到一次更新:

10-03 23:45:17.153: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-03 23:50:23.162: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-03 23:55:23.074: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m
10-04 00:00:23.077: DEBUG/TheApp(2025): Location updated with accuracy: 48.0m

以下是代码:

LocationManager locationManager = (LocationManager)
                   this.getSystemService(Context.LOCATION_SERVICE);

LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
        Log.d(APP_TAG, "Location updated with accuracy: " + location.getAccuracy() + "m");
    }
    //Other methods are empty and omitted for brevity
};

int TEN_MINUTES = 10 /*Minutes*/ * 60 /*sec per min*/ * 1000 /*ms per sec*/;
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
                                         TEN_MINUTES, 0, locationListener);

任何人都能解释为什么这不符合我的想法吗?例如。为什么每5分钟更新一次而不是10?

3 个答案:

答案 0 :(得分:5)

如LocationManager.requestLocationUpdates()文档中所述:

  

minTime :通知的最短时间间隔,以毫秒为单位。   该字段仅用作提示节省电力和实际时间的提示   位置更新之间的差异可能大于或小于此值。

因此,无法保证您不会更频繁地(或更少)获得更新。 GPS芯片可能能够提供更准确的位置信息而不消耗额外的功率,或者不允许所请求的粒度级别。另一个应用程序也可能在后台请求更新。

回答更多细节,可能需要了解手机中特定GPS接收器的工作原理。

答案 1 :(得分:0)

您确定不仅每五分钟更新一次日志吗?

当我在locationListener下做了类似的事情时,我做了一个检查以确保实际上已经过了10分钟。

if(System.CurrentTimeMillis() > updateTime + currentTimeInMillis)
{
 update your log here
 currentTimeInMillis = System.CurrentTimeMillis();
}

答案 2 :(得分:0)

这种行为至少可以说是古怪的。文档说这些参数只是提示。我无法回答的一个问题是:

在决定是否发送更新时,时间和距离参数是逻辑OR运算还是逻辑AND运算?

如果它是OR条件,那么如果操作系统认为你移动的距离超过最小距离则可能会更新。