Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的应用程序位置更新速度是我的两倍';你指定了什么?_Android_Location - Fatal编程技术网

Android 为什么我的应用程序位置更新速度是我的两倍';你指定了什么?

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分钟更新一次当前位置(我想大概是这样)。而是每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);

有人能解释一下为什么这没有像我想的那样有效吗?例如,为什么它不是每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的回调内,因此只有在更新的事件发生时才应该调用。是的,我知道这只是添加了一个额外的检查,以确保时间真正流逝。特别是如果其他东西可以触发您的事件。有趣的是,如果另一个应用程序正在进行位置更新,那么我的侦听器会被触发吗?假设这是有意义的。有趣的是,如果另一个应用程序正在进行位置更新,那么我的侦听器会被解雇吗?假设这是有道理的。