在我的应用程序中,我已经设置了一个位置管理器,每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?
答案 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条件,那么如果操作系统认为你移动的距离超过最小距离则可能会更新。