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

2cu*_*ech 6 android location android-location fusedlocationproviderapi android-fusedlocation

我希望每隔一定分钟进行一次硬位置修复,每隔一定分钟进行一次软位置修复,并且如果用户移动的距离超过一定米数。我一直在用下面的代码步行来测试逻辑(在驾驶时也尝试使用更大的参数),但它并没有真正返回我定期的位置修复。当请求开始时,它会立即返回位置修复,然后有时会在几分钟后返回 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);
Run Code Online (Sandbox Code Playgroud)

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

2cu*_*ech 6

经过长时间详尽的测试和实验,我发现如果您不打电话,setFastestInterval您将完全按照 设定的时间间隔获得定期更新setInterval

\n\n

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

\n\n

根据文档:如果setFastestInterval(long)设置得慢于setInterval(long),那么您的有效最快间隔是 setInterval(long)但这不会发生\xe2\x80\x99:例如设置以下参数应该每 1 分钟为您提供一次硬位置修复,但它不会(至少在棉花糖上):

\n\n
interval = 1 min\nfastestInterval = 20 min\ndisplacement = 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n