我在网上进行了研究,发现 Location Manager.requestLocationUpdates 方法并发现它采用了 minDistance 参数。网站( http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/ )给我的这个论点的定义是“通知的最小距离间隔”,例如 10 米。谁能澄清这意味着什么?每次我用手机移动 10 米,我都会收到 GPS 更新?
最佳答案
是的,本质上这意味着,如果平台观察到您当前的位置距离平台保存的最后位置超过 minDistance
,您的听众将收到更新位置的通知。请注意,这两个位置不一定需要是连续的(即,可能存在许多小位移,最终加起来达到 minDistance
,并且最终超过阈值的位置将是报告给应用程序)。
实际平台代码可以是seen on Github ,我也将其粘贴在下面:
private static boolean shouldBroadcastSafe(
Location loc, Location lastLoc, UpdateRecord record, long now) {
// Always broadcast the first update
if (lastLoc == null) {
return true;
}
// Check whether sufficient time has passed
long minTime = record.mRequest.getFastestInterval();
long delta = (loc.getElapsedRealtimeNanos() - lastLoc.getElapsedRealtimeNanos())
/ NANOS_PER_MILLI;
if (delta < minTime - MAX_PROVIDER_SCHEDULING_JITTER_MS) {
return false;
}
// Check whether sufficient distance has been traveled
double minDistance = record.mRequest.getSmallestDisplacement();
if (minDistance > 0.0) {
if (loc.distanceTo(lastLoc) <= minDistance) {
return false;
}
}
...
请注意,minDistance
参数仅在该值大于 0
时影响您的应用收到通知的时间。
另请注意,所有定位系统在计算位置时都存在很大程度的错误,因此,如果 minDistance
值较小,您可能会经常收到通知,但这些通知可能是定位计算中的错误,不是真实的用户移动。
关于java - 关于 LocationManager.requestLocationUpdates 方法的最小距离的说明,最小距离参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24354512/