// 声明LocationManager对象 LocationManager loctionManager; // 通过系统服务,取得LocationManager对象 loctionManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
方式一:
// 通过GPS位置提供器获得位置String providerGPS = LocationManager.GPS_PROVIDER; Location location = loctionManager.getLastKnownLocation(providerGPS);
方式二:
// 通过基站位置提供器获得位置String providerNetwork = LocationManager.NETWORK_PROVIDER;Location location = loctionManager.getLastKnownLocation(providerNetwork);
方式三:
// 使用标准集合,让系统自动选择可用的最佳位置提供器,提供位置 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);// 高精度 criteria.setAltitudeRequired(false);// 不要求海拔 criteria.setBearingRequired(false);// 不要求方位 criteria.setCostAllowed(true);// 允许有花费 criteria.setPowerRequirement(Criteria.POWER_LOW);// 低功耗 // 从可用的位置提供器中,匹配以上标准的最佳提供器 String provider = loctionManager.getBestProvider(criteria, true); // 获得最后一次变化的位置 Location location = loctionManager.getLastKnownLocation(provider);
处理:
// 显示在EditText中 updateWithNewLocation(location); // 监听位置变化,2秒一次,距离10米以上 loctionManager.requestLocationUpdates(provider, 1000, 1, locationListener);
监听器及显示:
// 位置监听器 private final LocationListener locationListener = 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 location) { // 使用新的location更新TextView显示 updateWithNewLocation(location); } }; private void updateWithNewLocation(Location location) { if (location != null) { double lat = location.getLatitude(); double lng = location.getLongitude(); latStr = format.format(lat); lonStr = format.format(lng); txtLat.setText(latStr); txtLon.setText(lonStr); } else { txtLat.setText(""); txtLon.setText(""); } }