Android 为什么我的应用程序位置更新速度是我的两倍';你指定了什么?
在我的应用程序中,我设置了一个位置管理器,每10分钟更新一次当前位置(我想大概是这样)。而是每5分钟更新一次:Android 为什么我的应用程序位置更新速度是我的两倍';你指定了什么?,android,location,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)
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);
有人能解释一下为什么这没有像我想的那样有效吗?例如,为什么它不是每10分钟更新一次,而是每5分钟更新一次?如LocationManager.requestLocationUpdates()文档中所述: minTime:通知的最小时间间隔,以毫秒为单位。 此字段仅用作节省电源和实际时间的提示 位置之间的更新可能大于或小于此值 因此,不能保证您不会更频繁(或更少)地获得更新。GPS芯片有可能在不消耗额外电源的情况下提供更准确的位置信息,或者不允许要求的粒度级别。另一个应用程序也可能在后台请求更新
回答更详细的问题可能需要了解手机中特定GPS接收器的工作原理。如LocationManager.RequestLocationUpdate()文档中所述: minTime:通知的最小时间间隔,以毫秒为单位。 此字段仅用作节省电源和实际时间的提示 位置之间的更新可能大于或小于此值 因此,不能保证您不会更频繁(或更少)地获得更新。GPS芯片有可能在不消耗额外电源的情况下提供更准确的位置信息,或者不允许要求的粒度级别。另一个应用程序也可能在后台请求更新
回答更详细的问题时,可能需要了解手机中特定GPS接收器的工作原理。您确定这不仅仅是每五分钟更新一次日志吗 当我在locationListener下做类似的事情时,我做了一个检查,以确保10分钟实际上已经过去了
if(System.CurrentTimeMillis() > updateTime + currentTimeInMillis)
{
update your log here
currentTimeInMillis = System.CurrentTimeMillis();
}
你确定不是每五分钟更新一次日志吗 当我在locationListener下做类似的事情时,我做了一个检查,以确保10分钟实际上已经过去了
if(System.CurrentTimeMillis() > updateTime + currentTimeInMillis)
{
update your log here
currentTimeInMillis = System.CurrentTimeMillis();
}
这种行为至少可以说是古怪的。文档中说这些参数只是提示。我不能真正回答的一个问题是: 在决定是否发送更新时,时间和距离参数是逻辑or还是逻辑and
如果这是一个或条件,那么如果操作系统认为您移动的距离超过了它可能更新的最小距离。至少可以说,这种行为很奇怪。文档中说这些参数只是提示。我不能真正回答的一个问题是: 在决定是否发送更新时,时间和距离参数是逻辑or还是逻辑and
如果是OR条件,那么如果操作系统认为您移动的距离超过了它可能更新的最小距离。日志注释在位置更新侦听器的回调范围内,因此只有在更新发生时才应该调用。是的,我知道这只会添加额外的检查,以确保时间真正流逝。特别是当其他东西可以触发您的事件时。日志注释在location update listener的回调内,因此只有在更新的事件发生时才应该调用。是的,我知道这只是添加了一个额外的检查,以确保时间真正流逝。特别是如果其他东西可以触发您的事件。有趣的是,如果另一个应用程序正在进行位置更新,那么我的侦听器会被触发吗?假设这是有意义的。有趣的是,如果另一个应用程序正在进行位置更新,那么我的侦听器会被解雇吗?假设这是有道理的。