Cómo puedo conseguir la localización geográfica actual del dispositivo programatically

Necesito obtener la ubicación geográfica actual del dispositivo.

Escenario: si estoy en US ..:

 my device location should be US 

Igual que en el caso, cuando estoy en UK :

 my device location should be UK 

Necesito el código de ejemplo para encontrar esta ubicación geográfica. (location determined by Network Location Provider )

5 Solutions collect form web for “Cómo puedo conseguir la localización geográfica actual del dispositivo programatically”

Si desea obtener el código de país actual, desea buscar en Geocoder que puede utilizar para obtener una Address que proporciona un método getCountryCode . Algo como esto

 Geocoder geocoder = new Geocoder(this); List<Address> addresses = null; try { addresses = geocoder.getFromLocation( location.getLatitude(), location.getLongitude(), 1); } catch (IOException e) { e.printStackTrace(); } if (addresses != null && addresses.size() > 0) { Address address = addresses.get(0); String countryCode = address.getCountryCode(); } 

En cuanto a la obtención de la latitud y la longitud actual, hay un montón de información sobre cómo hacer eso

Aquí está el código

Main MapActivity

  public class WhereIam extends MapActivity { MapController mapController; MyPositionOverlay positionOverlay; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView myMapView=(MapView)findViewById(R.id.myMapView); myMapView.setSatellite(true); myMapView.setBuiltInZoomControls(true); mapController=myMapView.getController(); mapController.setZoom(17); positionOverlay = new MyPositionOverlay(); List<Overlay> overlays = myMapView.getOverlays(); overlays.add(positionOverlay); LocationManager locationManager; String context=Context.LOCATION_SERVICE; locationManager=(LocationManager)getSystemService(context); 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 = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(provider); final LocationListener locationListener = new LocationListener() { public void onLocationChanged(Location location) { updateWithNewLocation(location); } public void onProviderDisabled(String provider){ updateWithNewLocation(null); } public void onProviderEnabled(String provider){ } public void onStatusChanged(String provider, int status, Bundle extras){ } }; updateWithNewLocation(location); locationManager.requestLocationUpdates(provider, 2000, 10, locationListener); } private void updateWithNewLocation(Location location) { if(location!=null) { // Update the map location. positionOverlay.setLocation(location); Double geoLat = location.getLatitude()*1E6; Double geoLng = location.getLongitude()*1E6; GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue()); mapController.animateTo(point); } } @Override protected boolean isRouteDisplayed() { return true; } 

Otra clase de MyPositionOverlay

 public class MyPositionOverlay extends Overlay { Location location; private final int mRadius = 5; @Override public void draw(Canvas canvas, MapView mapView, boolean shadow) { Projection projection = mapView.getProjection(); if (shadow == false) { // Get the current location Double latitude = location.getLatitude()*1E6; Double longitude = location.getLongitude()*1E6; GeoPoint geoPoint; geoPoint = new GeoPoint(latitude.intValue(),longitude.intValue()); // Convert the location to screen pixels Point point = new Point(); projection.toPixels(geoPoint, point); RectF oval = new RectF(point.x - mRadius, point.y - mRadius, point.x + mRadius, point.y + mRadius); // Setup the paint Paint paint = new Paint(); paint.setARGB(250, 255, 0, 0); paint.setAntiAlias(true); paint.setFakeBoldText(true); Paint backPaint = new Paint(); backPaint.setARGB(175, 50, 50, 50); backPaint.setAntiAlias(true); RectF backRect = new RectF(point.x + 2 + mRadius, point.y - 3*mRadius, point.x + 65, point.y + mRadius); // Draw the marker canvas.drawOval(oval, paint); canvas.drawRoundRect(backRect, 5, 5, backPaint); canvas.drawText("Here I Am", point.x + 2*mRadius, point.y, paint); } super.draw(canvas, mapView, shadow); } @Override public boolean onTap(GeoPoint point, MapView mapView) { return false; } public Location getLocation() { return location; } public void setLocation(Location location) { this.location = location; } } 

Hay muchos tutoriales disponibles para esto, aquí en SO he leído la respuesta agradable por Fedor en obtener la ubicación actual del usuario, prueba esto ¿Cuál es la forma más simple y más robusto para obtener la ubicación actual del usuario en Android? . Para dar respuesta a su pregunta en código es algo largo, también en esa respuesta él explica de manera agradable ..

También vaya a través de la guía para desarrolladores de Android. Obtenga la ubicación del usuario para obtener información básica sobre cómo funciona el administrador de ubicaciones en android.

Gracias.

Por encima de las soluciones también es correcto, pero algún tiempo si la ubicación es nula, entonces se bloquea la aplicación o no funciona correctamente. La mejor manera de obtener Latitude y Longitud de android es:

  Geocoder geocoder; String bestProvider; List<Address> user = null; double lat; double lng; LocationManager lm = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); bestProvider = lm.getBestProvider(criteria, false); Location location = lm.getLastKnownLocation(bestProvider); if (location == null){ Toast.makeText(activity,"Location Not found",Toast.LENGTH_LONG).show(); }else{ geocoder = new Geocoder(activity); try { user = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); lat=(double)user.get(0).getLatitude(); lng=(double)user.get(0).getLongitude(); System.out.println(" DDD lat: " +lat+", longitude: "+lng); }catch (Exception e) { e.printStackTrace(); } } 
 public class LocationHelper { LocationManager locationManager; public boolean getLocation(Context context) { if(locationManager==null) locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); List<String> providers = locationManager.getAllProviders(); Location location; for(String provider: providers) { try { if(locationManager.isProviderEnabled(provider)) { //dont use listener, it sometimes does not work location = locationManager.getLastKnownLocation(provider); if(location != null) { getDeviceInfo(location, context); break; } } } catch (Exception e) { } } return true; } private void getDeviceInfo(Location location, Context context) { Geocoder geocoder = new Geocoder(context); List<Address> addresses = null; try { addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); } catch (Exception e) { e.printStackTrace(); } if (addresses != null && addresses.size() > 0) { Address address = addresses.get(0); String countryCode = address.getCountryCode(); //any other data... } } 

}

  • Google Maps Geolocation api: acceso no configurado
  • ¿Qué dispositivos admiten Android Batching de sensores?
  • Navigator.geolocation.getCurrentPosition siempre obtiene un código de error 3: timeout expirado
  • ¿Google ofrece una API que puedo usar para obtener la ubicación de mi teléfono?
  • ¿Dónde estoy? - Obtener país
  • Cómo determinar la ubicación del dispositivo en Android mediante la dirección IP
  • Error getFromLocationName, Servicio no disponible. Han estado trabajando, se detuvo
  • Geolocalización de webview de android
  • ¿Cuál es la manera más simple y más robusta de obtener la ubicación actual del usuario en Android?
  • JavaScript La geolocalización no funciona en todos los navegadores de Android: funciona en iOS y PC
  • Cómo encontrar la estación de policía más cercana a un punto geográfico
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.