5

我想每隔几分钟获得一次硬定位,每隔几分钟进行一次软定位,如果用户移动的距离超过某些米。我一直在使用以下代码步行测试逻辑(在驾驶时也尝试使用更大的参数),但它并没有真正返回我定期的位置修复。它会在请求开始时立即返回位置修复,然后有时会在几分钟后返回 1 个位置修复,但随后最多一个小时它不会返回位置修复。

LocationRequest locationRequest = LocationRequest.create();
int priority = PRIORITY_BALANCED_POWER_ACCURACY;
locationRequest.setPriority(priority);
locationRequest.setInterval(localInterval); //set to 6 minutes
locationRequest.setFastestInterval(localFastestInterval); //set to 3 minutes
locationRequest.setSmallestDisplacement(smallestDisplacement); //set to 10 meters
locationRequest.setNumUpdates(numUpdates);  //set to Int.MAX_VALUE
locationRequest.setExpirationDuration(expirationDuration); // set to Long.MAX_VALUE
LocationServices.FusedLocationApi.requestLocationUpdates(locationClient, locationRequest, pendingIntent);

如果我将位移设置为 0,那么我会定期更新位置。知道发生了什么吗?

4

1 回答 1

4

经过长时间的详尽测试和实验,我发现如果您不打电话setFastestInterval,您将完全按照setInterval.

然而,由于其他应用程序可能会导致定位修复非常快地交付给您,因此只需检查忽略交付速度超过某个时间阈值的定位修复。

根据文档:如果setFastestInterval(long)设置比 慢setInterval(long),那么您的有效最快间隔是 setInterval(long)但这不会发生:例如,设置以下参数应该每 1 分钟为您提供一次硬定位,但它不会(在 Marshmallow at-至少):

interval = 1 min
fastestInterval = 20 min
displacement = 0

如果有人可以用一段代码来反驳我的发现,那就太好了。

于 2016-10-14T20:04:49.087 回答