java - 关于 LocationManager.requestLocationUpdates 方法的最小距离的说明,最小距离参数

标签 java android gps locationmanager

我在网上进行了研究,发现 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/

相关文章:

java - 我的哈希表应该使用什么大小的存储桶?

java - 如何从 ArrayList 中删除元素?

java - BigDecimal#compareTo 具有不同的比例

android - 如何调用 Android 联系人列表并从其详细信息屏幕中选择一个电话号码?

java - spring data动态组合@query查询

android - Ionic/Cordova SqLite 并不总是在 Play 商店的应用程序更新之间持续存在

代码自动完成时 Android Studio 崩溃

android - 检查地理位置是否被欺骗

android - 如何获取 GPS 原始数据(卫星伪距)?

blackberry - 直接从usb接口(interface)从黑莓(珍珠)获取gps数据