【问题标题】:Get up-to-date GPS Location获取最新的 GPS 位置
【发布时间】:2014-10-21 17:32:19
【问题描述】:

要获取我正在执行的位置:

if (isGPSEnabled) {
    if (locatTeste == null) {
        locationManager.requestLocationUpdates(
                        LocationManager.GPS_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

        if (locationManager != null) {
            locatTeste = locationManager
                         .getLastKnownLocation(LocationManager.GPS_PROVIDER);

        }
    }
}

但有时它会给我一个过时的位置...我怎样才能获得最新的位置?

【问题讨论】:

    标签: android gps location locationmanager


    【解决方案1】:

    您在 requestLocationUpdate() 处所做的是要求系统启动 GPS 并返回位置,但请记住,此调用是异步的,这意味着您不会在下一行获得位置,但只有在它会准备好的。这就是您有时可能无法获得最新位置的原因(您甚至可能根本无法获得位置)。 您需要选择要使用的方法,第一个方法 - requestLocationUpdate() 将注册您正在使用的类以进行位置更新,并在准备好时以异步时间获取位置。 第二种方法 - getLastKnownLocation() 将返回系统的最后一个位置。这确实以同步方式工作,但有时可能不会更新。 我会先尝试第二种方法,检查位置的质量,如果不是最新的,请使用第一种方法接收。

    类似的东西:

    if (isGPSEnabled && locationManager != null) {
        Location l = locationManager
                             .getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (checkIfLocationIsUpdated(l)){
            useLocation(l);
        }
        else{
            locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
        }
    }
    
    @override
    public void onLocationChanged(Location l){
        useLocation(l);
    }
    

    编辑:

    private boolean checkIfLocationIsUpdated(Location l){
        long maxInterval = 60*1000; //1 minute
        float maxAccuracy = 30; //30 meter.
        if (System.currentTimeMillis - l.getTime() < maxInterval && l.getAccuracy < maxAccuracy){
            return true;
        }
        else{
            return false;
        }
    }
    

    【讨论】:

    • 我如何检查这个?
    【解决方案2】:

    这是意料之中的。

    您正在使用函数 getLastKnownLocation(...) 并且应用程序正在返回它在内存中的内容。根据documentation,这可能已经过时了。

    改为使用requestLocationUpdates(...) 并传入参数,说明您希望位置更新的频率或在什么情况下。

    完整阅读 Androids Location Manager 以了解您可以使用的功能。

    【讨论】:

    • 您的更新间隔时间是多少?您在哪里使用该设备(开放空间或封闭空间)?
    • 在我家里面……但它给了我 1390 米的精度……时间是一分钟……
    • 将其减少到 30 秒,即 30000 毫秒。就像在你家一样,锁定位置需要更长的时间。应用程序在完全开发后是否可以访问 WIFI?
    • 是的,它会有...这里只是一个例子...但我必须确保 GPS 始终是最新的
    • 你是说位置吧?在这种情况下,如果您有 wifi,请使用 Wifi 对您的位置进行三角测量。它更快,几乎准确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2015-05-17
    相关资源
    最近更新 更多