LocationGPS

Testeado en versión la 1.0

LocationGPS es un ejemplo de como poder capturar la localización del GPS con Android.

El ejemplo funciona de una manera sencilla. Simplemente pulsamos el botón y aparecerá en la pantalla la latitud y la longitud de nuestra posición actual.

Capturas del programa


Pantalla LocationGPS 1 Pantalla LocationGPS 2

Como funciona

El programa lanza un Thread que será el que se encargará de buscar la posición GPS. Se usa un Thread para poder mostrar mientras que está buscando una barra de proceso (ProgressDialog).

Lo primero que tenemos que hacer para poder usar la señal de GPS es añadir al Manifest.xml de nuestro proyecto el permiso "ACCESS_FINE_LOCATION". Para ello escribimos esta línea:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
					

Luego en el código JAVA necesitamos un objeto LocationManager, al cual asignaremos un escuchador (LocationListener) para que nos informe cada vez que cambia el estado del GPS mediante el método onLocationChanged. Cuando registremos el escuchador podremos asinarle el tiempo y la distancia mínima para que se refresque el estado de la señal GPS.

El método run() que llama el Thread al ejecutar el método start() es el siguiente:

  1. @Override
  2. public void run() {
  3. mLocationManager =
  4. (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  5. if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
  6. Looper.prepare();
  7. mLocationListener = new MyLocationListener();
  8. mLocationManager.requestLocationUpdates(
  9. LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
  10. Looper.loop();
  11. Looper.myLooper().quit();
  12. } else {
  13. Toast.makeText(getBaseContext(),
  14. getResources().getString(R.string.gps_signal_not_found),
  15. Toast.LENGTH_LONG).show();
  16. }
  17. }

Aquí se puede ver como se usa el método requestLocationUpdates del objeto LocationManager para registrar el objeto LocationListener.

Varias cosas debemos de saber. En Android podemos manejar las localizaciones a patir de proveedores (Providers). El proveedor GPS_PROVIDER es nuestro GPS y en este código estamos pidiéndole a él que nos diga la posición. Además, para trabajar con Threads en Android es necesario llamar a Looper.prepare(); al principio del método run() y Looper.loop(); al final. Realmente no se para que funcionan, supongo que para controlar el estado del Thread, pero sin estas líneas el programa dará un error en tiempo de ejecución.

También tenemos un objeto Handler al cual llamaremos cuando tengamos la localización de nuestro GPS y que se encargará de cerrar la ventana de proceso y de establecer los valores del longitud y latitud en los TextView. Esto último es importante, ya que no podemos establecer los valores de los TextView desde el método onLocationChanged del LocationListener ya que para establecer los valores del GUI no se puede hacer desde un Thread que no sea el principal.

Simular una señal de GPS en el emulador

Para poder probar la aplicación en el emulador debemos de mandar una señal de GPS a este. Para ello Eclipse en su perpectiva DDMS de Android tiene una apartado donde se puede enviar la latitud y longitud del GPS, pero a mi no me funciona.

La alternativa es hacerlo mediante telnet. Para ello abrimos un terminal (tanto en Windows como en Linux) y escribimos:

$ telnet localhost 5554
					

Esto hará que nos podamos conectar al emulador (que tiene que estar ejecutándose, por supuesto). Una vez que estemos en la Android Conlose simplemente escribimos lo siguiente:

$ geo fix 6.46466 8.6456445
					

Donde el primero valor es la latitud y el segundo la longitud.

Para problarlo en el programa seguimos los siguientes pasos:

  • Abrimos el emulador y lanzamos el programa
  • Pulsamos en el botón "Buscar posición GPS" y lanzará el diálogo "Buscando..."
  • Ahora abrimos la consola y hacemos el telnet
  • Lanzamos la geoposición que queramos
  • El programa debería de decirlos la posición que le hemos enviado

Descargar

Descargar Proyecto para Eclipse

Descarga el proyecto e impórtalo en Eclipse.

Descargar Programa (.apk)

Podrás instalar el programa en el emulador. Simplemente entra en el directorio "tools" del SDK desde línea de comandos y escribe:

$ adb install directorio_programa/LocationGPS.apk