安卓融合定位无法提供周期性更新

6

我希望每隔一定时间获取一个硬定位信息和一个软定位信息,如果用户移动了一定的距离。我已经使用以下代码进行测试(尝试使用更大的参数进行测试),但它并没有真正返回定期的位置信息。当请求开始时,它会立即返回一个位置信息,然后有时会在几分钟后返回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,则会定期接收位置更新。你知道是怎么回事吗?

'numUpdates' 的值是多少? - SachinS
@SachinS 请查看同一行的注释。 - 2cupsOfTech
1个回答

5
经过长时间的详尽测试和实验,我发现如果您不调用setFastestInterval,则会按照使用setInterval设置的间隔精确地获取定期更新。
然而,由于其他应用程序可能会导致位置修复非常快速地传递给您,因此请检查是否忽略了传递时间低于某个阈值的位置修复。
根据文档:如果setFastestInterval(long)设置得比setInterval(long)慢,则您的最快间隔是setInterval(long),但这种情况并不会发生:例如,设置以下参数应该每1分钟给您提供一个硬位置修复,但它(至少在Marshmallow上)没有实现:
interval = 1 min
fastestInterval = 20 min
displacement = 0

如果有人能够用一段代码来证明我的发现是错误的,那就太好了。

我看到了你描述的类似行为。我把它放在另一个帖子里:https://stackoverflow.com/questions/55869773/android-locationrequest-calling-setfastestinterval-with-slower-value-than-seti - favq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接