java - tiempo - obtener ubicacion gps android studio
Cómo obtener la ubicación de Android GPS (5)
Aquí está tu problema:
int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());
Latitud y Longitud son valores double
, ya que representan la ubicación en grados.
Al convertirlos a int
, estás descartando todo lo que hay detrás de la coma, lo que hace una gran diferencia. Ver "Grados decimales - Wiki"
Saludos, estoy tratando de obtener la ubicación GPS actual a través de Android. Seguí este tutorial y artículo de Vogellas también. Aunque no está funcionando. Cuando uso LocationManager.NETWORK_PROVIDER, siempre obtengo una latitud de 51 y una longitud de 9, sin importar dónde estoy parado. Cuando uso LocationManager.GPS_PROVIDER, no recibo nada en absoluto.
Aunque todo funciona al usar GMaps: S No tengo idea de por qué. ¿Cómo puedo obtener la ubicación actual del GPS como lo hace GMaps?
Aquí está mi código:
package com.example.gpslocation;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
public class GPS_Location extends Activity implements LocationListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gps__location);
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.gps__location, menu);
return true;
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());
Log.i("Geo_Location", "Latitude: " + latitude + ", Longitude: " + longitude);
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
Darle una oportunidad :
public LatLng getLocation()
{
// Get the location manager
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(bestProvider);
Double lat,lon;
try {
lat = location.getLatitude ();
lon = location.getLongitude ();
return new LatLng(lat, lon);
}
catch (NullPointerException e){
e.printStackTrace();
return null;
}
}
El problema inicial se resuelve al cambiar lat
y lon
al doble.
Deseo agregar un comentario a la solución con Location location = locationManager.getLastKnownLocation(bestProvider);
Funciona para conocer la última ubicación conocida cuando se solicitó otra aplicación para eso. Si, por ejemplo, ninguna aplicación lo hizo desde el inicio del dispositivo, el código devolverá ceros (me pasé un tiempo recientemente para descubrirlo).
Además, es una buena práctica dejar de escuchar cuando no hay necesidad de eso por locationManager.removeUpdates(this);
Además, incluso con permisos en manifest
, el código funciona cuando el servicio de ubicación está habilitado en la configuración de Android en un dispositivo.
Este código tiene un problema:
int latitude = (int) (location.getLatitude());
int longitude = (int) (location.getLongitude());
Puedes cambiar int
para double
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Extracto:-
try
{
cnt++;scnt++;now=System.currentTimeMillis();r=rand.nextInt(6);r++;
loc=lm.getLastKnownLocation(best);
if(loc!=null){lat=loc.getLatitude();lng=loc.getLongitude();}
Thread.sleep(100);
handler.sendMessage(handler.obtainMessage());
}
catch (InterruptedException e)
{
Toast.makeText(this, "Error="+e.toString(), Toast.LENGTH_LONG).show();
}
Como puede ver arriba, un subproceso se ejecuta junto con el subproceso principal de la actividad de la interfaz de usuario que muestra continuamente latitud GPS, largo junto con la hora actual y una tirada de dados aleatoria.
Si tiene curiosidad, simplemente revise el código completo: ubicación del GPS con lanzamiento de dados aleatorio y hora actual en un hilo separado