Android 融合位置不会提供定期更新

Android Fused Location Won't Deliver Periodic Updates

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

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,那么我会定期更新位置。知道发生了什么事吗?

经过长时间详尽的测试和实验,我发现如果您不调用 setFastestInterval,您将根据 setInterval 设置的时间间隔获得定期更新。

然而,由于其他应用程序可能会导致向您快速传送位置修正,因此只需检查是否忽略传送速度快于特定时间阈值的位置修正。

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

interval = 1 min
fastestInterval = 20 min
displacement = 0

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