【问题标题】:How to get latitude and longitude by GPS and/or by network?如何通过 GPS 和/或网络获取纬度和经度?
【发布时间】:2014-10-12 14:04:28
【问题描述】:

我需要一种方法来简单地获取纬度和经度。我正在开发我的第一个应用程序...你能告诉我我的做法是否正确吗?

这是我的方法:

private void getCoordinates() {
    getCurrentLocation();

    boolean gpsEnabled = lManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    boolean netEnabled = lManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    if (!gpsEnabled && !netEnabled && location != null) {
        Builder alarm = new AlertDialog.Builder(this);
        alarm.setTitle("Error");
        alarm.setMessage("Localization OFF").create().show();
    } else if (location != null && (gpsEnabled || netEnabled)) {
        lManager.removeUpdates(lListener);
        lat = String.valueOf(location.getLatitude());
        lon = String.valueOf(location.getLongitude());
    } else {
        Builder alarm = new AlertDialog.Builder(this);
        alarm.setTitle("Error");
        alarm.setMessage("Localization OFF").create().show();
    }
}

private void getCurrentLocation() {     
    lManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);   
    lListener = new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onLocationChanged(Location loc) {
            location = loc;
        }
    };

    LocationProvider gpsProvider = lManager.getProvider(LocationManager.GPS_PROVIDER);
    if (gpsProvider != null) {
        boolean gpsEnabled = lManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        boolean netEnabled = lManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (!gpsEnabled && netEnabled) {
            lManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, lListener);
            location = lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        } else if (gpsEnabled) {
            lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, lListener);
            location = lManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        }   
    } else {
        Builder alarm = new AlertDialog.Builder(this);
        alarm.setTitle("Error");
        alarm.setMessage("GPS provider not supported").create().show();
    }
}

如果您发现任何错误或给我任何建议,请修复它。

【问题讨论】:

标签: android networking localization gps latitude-longitude


【解决方案1】:

问题是当您为该位置设置监听器时,它不会立即接收到位置 - 特别是使用 GPS 位置时。因此,您的位置不会返回当前坐标。 您可以在位置管理器中调用 getLastKnownLocation ,但这可能是旧的或不存在的位置。另一种选择是从

@Override
  public void onLocationChanged(Location loc) {
       someCallBack(loc);
   }

看看我在 github 上的 NoteLocation 示例 Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多