在LocationManager.requestLocationUpdates方法,min Distance参数上澄清最小距离

时间:2014-06-22 18:46:14

标签: java android gps locationmanager

我在网上研究并看到了Location Manager.requestLocationUpdates方法,并看到它接受了minDistance的参数。网站(http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/)为该论点提供的定义是“通知的最小距离间隔”,示例为10米。任何人都可以澄清这意味着什么?每次我用手机移动10米,我得到一个GPS更新?

1 个答案:

答案 0 :(得分:4)

是的,基本上这意味着如果平台观察到当前位置距平台保存的最后一个位置超过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值时,您可能会经常收到通知,但这些通知在定位计算中可能会出错,而不是真的用户运动。