6

我想在android中获取当前的确切位置坐标。如果手机连接到 Wifi 互联网连接,我可以获取位置,但在其他情况下,当我去其他地方并且没有可用的互联网连接时,它不会提供当前位置坐标。而是给出最后一个位置坐标。

例如:

目前我在 A 城市并通过 wifi 连接获取当前坐标并移动到城市 B 然后我无法获取当前坐标。取而代之的是,它给出了最后的位置坐标。

谁能建议我如何在没有互联网连接的情况下获得当前位置。

public Location getLocation() {
    try {
        locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);

        // getting GPS status
        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled && !isNetworkEnabled) {
            // no network provider is enabled
        } else {
            this.canGetLocation = true;
            // First get location from Network Provider
            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                if (locationManager != null) {
                    location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }

            // if GPS Enabled get lat/long using GPS Services
            if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    if (locationManager != null) {
                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}

/**
 * Stop using GPS listener
 * Calling this function will stop using GPS in your app
 * */
public void stopUsingGPS(){
    if(locationManager != null){
        locationManager.removeUpdates(GetLocations.this);
    }
}

/**
 * Function to get latitude
 * */
public double getLatitude(){
    if(location != null){
        latitude = location.getLatitude();
    }
    return latitude;
}

/**
 * Function to get longitude
 * */
public double getLongitude(){
    if(location != null){
        longitude = location.getLongitude();
    }
    return longitude;
}
4

2 回答 2

3

您显示的代码只是getLocation您的类的方法。大概你的班级也实现了LocationListener,对吗?(假设它没有看到它,因为您将“this”分配requestLocationUpdates为侦听器。)

您展示的方法只会返回 LAST KNOWN 位置,因为通过提供者的位置更新是异步的。您表明您希望通过注册侦听器来获取位置信息,并且该侦听器会定期更新(基于您为其提供的设置,并基于实际的设备功能和环境)。注册后您不会立即取回该位置。

对于您的问题,在未连接到网络时获取位置信息,您需要使用 GPS 提供程序(它在未连接到数据网络时工作)。一旦你注册了一个 GPS 提供者监听器(就像你已经拥有的那样),你将通过监听器中的回调获得位置更新,onLocationChanged(Location location).

你的onLocationChanged回调是做什么的?

在您注册 GPS 提供商后,您将在几秒到几分钟内获得更新的位置信息(多长时间取决于您使用的设备中的硬件和环境条件,GPS 使用多个卫星并且工作速度更快,清晰天空视图,如果您在室内或信号受阻,它可能根本无法工作)。

除了等待侦听器为您提供更新的位置信息之外,您可能还需要考虑使用一些更简单、独立的方法来获取最后一个已知位置并注册最佳提供商。您可以使用一些简单的循环和Criteria您感兴趣的循环(COARSE 与 FINE、LOW_POWER 与否等)。

Android 开发人员在文档、“Protips for Location”开源示例应用程序和“Deep Dive”博客文章(其中包含指向所有其他资源的链接)中已经很好地记录了这一点:http://android -developers.blogspot.com/2011/06/deep-dive-into-location.html

于 2013-03-03T23:42:49.360 回答
-2

没有 Internet 和 GPS,您可以获得基于 GSM(蜂窝网络)的位置。

NETWORK_PROVIDER 将在可用的 GSM 或 wifi 上解析。显然,在关闭 wifi 的情况下,将使用 GSM。但是,蜂窝网络精度可能从 500m 到 2000M 不等。

于 2013-03-04T09:12:21.877 回答