Android: cómo encontrar mi ubicación
Frecuentes
Visto 2,738 equipos
0
He leído muchas publicaciones en stackoverflow sobre eso, pero no encontré la respuesta que necesito. Encontrar mi ubicación es muy sencillo usando el gps o usando el proveedor de red, pero hay un problema. Al principio, mi aplicación verifica si el gps está activo y, si no, envío al usuario a la página de opciones de gps. Después de eso, el usuario puede volver a la primera actividad. Uso la ubicación actual en esta actividad y en una segunda actividad. Pongo el oyente solo en la primera actividad y en la función "onLocationUpdate()" guardo mi latitud y longitud en mis variables globales de aplicación. Si inicio la aplicación, configuro el gps habilitado y luego abro mi segunda actividad, la latitud y la longitud son iguales a 0.0, pero si inicio la actividad, configuro el gps habilitado, luego espero 30 segundos, funciona. ¿Existe algún método para eliminar este retraso? ¡Usar Network_Provider es más rápido, pero no es tan preciso como el gps!
Las piezas de código son las siguientes:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean gpsStatus = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsStatus) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
this);
alertDialogBuilder.setTitle("The GPS is off!");
alertDialogBuilder
.setMessage("Turn on the GPS?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
Intent intent1 = new Intent();
intent1.setClassName(
"com.android.settings",
"com.android.settings.SecuritySettings");
startActivity(intent1);
dialog.cancel();
}
})
.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 500.0f, locationListener);
Esta parte es para verificar si el gps está habilitado. ¿Existe un método para habilitar el GPS sin ir a la página de configuración?
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) { // update
if (location != null) {
msg_r.setLatitude(location.getLatitude());
msg_r.setLongitude(location.getLongitude());
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
Este es mi oyente.
2 Respuestas
2
Debería leer los artículos de Reto Meier sobre la creación de aplicaciones basadas en la ubicación:
Respondido el 12 de junio de 12 a las 16:06
1
El GPS necesita tiempo para obtener su ubicación actual. No hay forma de evitarlo. Podrías usar el método getLastKnownLocation()
si quieres que sea más rápido, o como dijiste, podrías usar un proveedor de red. Sin embargo, la última ubicación conocida puede no ser precisa en absoluto.
El GPS no está listo hasta la primera vez que llama onLocationUpdate()
. Por lo tanto, puede hacer que el usuario permanezca en la primera actividad hasta que ocurra este evento y luego permitir que el usuario vaya a la segunda actividad. O haz que la segunda actividad obtenga actualizaciones de ubicación. Hay diferentes cosas que podrías hacer.
En cuanto a habilitar el GPS sin ir a la página de configuración, no puede. No puedo encontrar la pregunta, pero CommonsWare acaba de responder esta pregunta hace unas horas indicando que esto no puede suceder porque es un problema de privacidad.
Respondido el 12 de junio de 12 a las 17:06
¡Gracias por la respuesta! Traté de usar getLastKnownLocation(), pero obtuve todas las veces un valor nulo. =( - microprogramador
¿Alguno de estos podría ser el problema? Si el teléfono nunca ha tenido una actualización de GPS, entonces nunca ha tenido una última ubicación conocida. ¿Estás seguro de que tu LocationManager
se inicializa? - Ryan
Pero esto es extraño porque en la primera actividad uso un mapa y muestro myOverlay, ¡así que el mapa conoce mi ubicación y crea la superposición! Además, si el gps está apagado, se muestra mi posición, ¡así que creo que la ubicación ya se conoce! :S - microprogramador
Si no lo ha descubierto, ¿podría publicar el código/error donde cree que está sucediendo esto? - Ryan
Usé esta solución: un "while" en el que verifico cada ciclo si recibí una latitud y longitud diferente de 0.0. Después de 15 segundos, si no recibí nada, pruebo con la última ubicación conocida y si es nula, devuelvo a la primera actividad de los usuarios. No es la mejor solución pero funciona... ¡espero! - microprogramador
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android gps or haz tu propia pregunta.
Siempre habrá un retraso de tiempo al usar el GPS, ya que primero debe adquirir una conexión con al menos 4 satélites antes de que pueda proporcionar una ubicación. Raghav Sood