Blog

Programación, desarrollo web y SEO

GPS con Android | Mostrar tu posición

GPS con Android

Esta entrada contiene el código de una aplicación “GPS con Android” desarrollada para la versión 2.4 o superior en la que mostramos las coordenadas GPS en las que nos encontramos.

La aplicación muestra una imagen (un camioncito) en la posición en la que estamos en ese momento e indica la latitud y la altitud. Estas coordenadas se pueden mostrar en cualquier mapa como por ejemplo Google Maps, además podéis realizar una actualización de la posición pasándole un parámetro de tiempo que refrescará nuestros datos en el tiempo que hayáis indicado en la variable.

El código de la mini aplicación GPS con Android está comentado con bastantes explicaciones, si necesitáis alguna más podéis dejar un comentario y os responderemos en breve.

Este es el código:

Código GPS con Android

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
package spawn.gps;
 
import java.io.IOException;
import java.util.List;
import java.util.Locale;
 
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.Toast;
 
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
 
//GPS con Android 
 
public class GpsActivity extends MapActivity {
 
    private MapView mapView;
    private MapController mc;
 
    private ParticularItemizedOverlay itemizedoverlay;
    private Geocoder geoCoder;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        LocationManager milocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        milocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, new MiLocationListener());
        mapView = (MapView) findViewById(R.id.mapview);
        mc = mapView.getController();
        mapView.setBuiltInZoomControls(true);
 
        Drawable drawable = this.getResources().getDrawable(R.drawable.ic_camion);
        itemizedoverlay = new ParticularItemizedOverlay(drawable,this);
        geoCoder = new Geocoder(this, Locale.getDefault());
    }
 
    protected boolean isRouteDisplayed() {
        return false;
    }
 
    public class MiLocationListener implements LocationListener{
        public void onLocationChanged(Location loc){
        	if (loc != null) {
		        double lat = loc.getLatitude();
		        double lon = loc.getLongitude();
		        String coordenadas = "Se ha movido a: " + "Latitud = " + lat + "Longitud = " + lon;
		        Toast.makeText( getApplicationContext(),coordenadas,Toast.LENGTH_LONG).show();
                GeoPoint point = new GeoPoint((int) (lat),(int) (lon));
                mc.animateTo(point);
                String address="";
 
                //mc.setZoom(16); 
///////////////////////////
                try {
                	geoCoder.getFromLocation(40,  4, 1);
                    //List<Address> addresses = geoCoder.getFromLocation(lat/1E6,  lon/1E6, 1);
                    //if (addresses.size() > 0) {
                    //    for (int i = 0; i < addresses.get(0).getMaxAddressLineIndex(); i++)
                    //       address += addresses.get(0).getAddressLine(i) + "\n";
                    //}
 
                } catch (IOException e) {
                	System.out.println("oooo que penita");
                    e.printStackTrace();
                }
///////////////////////////
                //Saco un icono con dicha geolocalización
                List<Overlay> mapOverlays = mapView.getOverlays();
                //Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
                //GeoPoint point = new GeoPoint(-4443769,40115845);
                OverlayItem overlayitem = new OverlayItem(point, "Está aquí", address);
                itemizedoverlay.addOverlay(overlayitem);
                mapOverlays.add(itemizedoverlay);
 
                mapView.invalidate();
        	}
        }
        public void onProviderDisabled(String provider){
        	Toast.makeText( getApplicationContext(),"Gps Desactivado",Toast.LENGTH_SHORT ).show();
        }
        public void onProviderEnabled(String provider){
        	Toast.makeText( getApplicationContext(),"Gps Activo",Toast.LENGTH_SHORT ).show();
        }
        public void onStatusChanged(String provider, int status, Bundle extras){}
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
package spawn.gps;
 
import java.util.ArrayList;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.OverlayItem;
 
public class ParticularItemizedOverlay extends ItemizedOverlay<OverlayItem>
{
 private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
 private Context mContext;
 
	 public ParticularItemizedOverlay(Drawable defaultMarker, Context context) {
		 super(boundCenterBottom(defaultMarker));
		 mContext = context;
	 }
 
	 public void addOverlay(OverlayItem overlay) {
		 mOverlays.add(overlay);
		 populate();
	 }
 
	 protected OverlayItem createItem(int i) {
		 return mOverlays.get(i);
	 }
 
	 public int size() {
		 return mOverlays.size();
	 }
 
	 protected boolean onTap(int index) {
		 OverlayItem item = mOverlays.get(index);
		 AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
		 dialog.setTitle(item.getTitle());
		 dialog.setMessage(item.getSnippet());
		 dialog.show();
		 return true;
	 }
}

Esta es la imagen del GPS en un móvil con Android:

GPS android

Aquí tenéis el código completo de la aplicación “GPS con Android“.

En este link tenéis el “autoinstalable de Android .Apk

Share this post

29 comments

Join the conversation
  • nato12 - 27 marzo, 2012 reply

    tengo una duda, me da este error al momento de abrir el proyecto:

    [2012-03-27 00:33:57 - Gps] Unable to resolve target ‘Google Inc.:Google APIs:10′

  • MMane - 27 marzo, 2012 reply

    El error que te da es porque no has indicado el api que vas a usar.

    La idea es que cuando haces un proyecto te dice que api vas a usar si usas las normales, las que no son de google,usease la 2.3 o la 4.0
    va bien excepto por el tema que esta usando google maps
    como usas google maps, al hacer el proyecto tienes que indicar que la estoy haciendo para la api de google, la 10… si no haces esto te saltará ese error!

  • antrax - 18 mayo, 2012 reply

    oye x k marca error en id mapView = (MapView) findViewById(R.id.mapview); y despues corrijo el id y pasa al mapview

    admin - 18 mayo, 2012 reply

    Hola,

    No he entendido bien a que te refieres, si me das más información igual puedo echarte una mano.

    Saludos

  • antrax - 19 mayo, 2012 reply

    estoy desarrollando lo k es el gps pro al guiarme un poko con tu codigo ami m muestra un error en: id, de esta linea de codigo al ponerle en la cruz k nos marca al lado izquierdo se corrije pro despues de corregir el id manda una linea roja en .mapView y ya despues marco lo que es la cruz del lado izquierdo pro marca una opcion que es rename lo marco pro sale un ectangulo y ya se keda como erroneo y no lo corre.

    esta es la linea donde sale el error en tu cod no se si falte una libreria o no se llevo poko desarrollando mapView = (MapView) findViewById(R.id.mapview); y despues

    gracias

    admin - 21 mayo, 2012 reply

    Hola,
    Parece que tienes un error de referencias en el código, es posible que el xml dónde deberías tener el mapview esta mal referenciado.
    Saludos

  • Eliez - 9 septiembre, 2012 reply

    Hola amigo una pregunta corri el codigo y no me causo problemas pero al momento de hacer el instaldor lo hace y lo instala pero si lo quiero abrir en el telefono sale error, tambien descargue el apk que tienes en la pagina y me sale lo mismo alguna idea del porque??

  • Roul - 10 septiembre, 2012 reply

    En mi caso, sobre la versión 2.4 corre perfectamente.
    ¿Qué versión tienes?
    ¿Qué error te muestra?

  • Joaquín - 26 septiembre, 2012 reply

    Tengo un problema, al cambiar de localización me crea perfectamente el icono de la nueva localización, pero se mantiene el anterior, se supone que el invalidate(); es para que no ocurra eso o no ?
    no entiendo por que no desaparece el icono anterior.

    agradecería tu respuesta.

    y gracias por el tutorial!

  • Joaquín - 26 septiembre, 2012 reply

    Ya lo solucioné xD

    Tengo otra consulta, por lo que entiendo, los overlays son capas que se superponen sobre le mapa, se pueden tener dos capas ?
    tengo una capa con la posicion actual que se va actualizando, como en tu ejemplo, y quisiera tener otra capa, donde estuvieran los iconos de distintas ubicaciones de interés.
    como puedo realizar esto ?

    Gracias.

    admin - 28 septiembre, 2012 reply

    Hola Joaquín,

    En principio, podrías hacerlo con “overlays” creando diferentes capas dependiendo de lo que necesites poner.

    Saludos

  • maick - 6 marzo, 2013 reply

    por q en el emulador de eclipse no me sale nada? me dice que la aplicacion no esta instalada?
    solo funciona para el telñefono?

  • alejandra - 10 marzo, 2013 reply

    quisiera saber si con esta aplicacion me puedo ubicar en un mapa creado por mi en shape y que libreria debo utilizar

  • luis - 16 marzo, 2013 reply

    como seria el codigo,si cuando yo ingrese las coordenadas me muestre un punto en el mapa

  • Jose Luis - 21 mayo, 2013 reply

    Hola que tal descargue el codigo y compila sin problemas pero al correrlo en un telefono no hace nada, ni marca error solo sale una cuadricula con un punto, sabras a que se debe esto?

    saludos

  • Ternce - 7 agosto, 2013 reply

    Hl tengo el programa almacenado aqui en mi pc pero son de android y no se como pasarlos a mi celular?

  • Javier - 15 septiembre, 2013 reply

    Hola, muy interesante el codigo. Tengo una pregunta, sabes por casualidad o tienes alguna pagina de referencia donde pueda documentarme sobre como puedo capturar los datos que me envia el dispositivo GPS y almacenarlos en una BD?

    Gracias.

    Ber - 16 septiembre, 2013 reply

    Hola Javier,

    Claro, hicimos una aplicación para Android (con Java) en la que el móvil enviaba los datos cada 20 seg. a una base de datos MySql alojada en un servidor web. Despues desde una página web haciamos consultas a la base de datos para obtener las rutas que habían seguido los distintos móviles. Y por último pintabamos esas rutas en nuestra página web dónde incluiamos un mapa de “Google Maps”. Dónde se podía ver perfectamente que ruta había realizado cada usuario, cada día, etc.

    Un saludo.

    Jr - 25 mayo, 2014 reply

    donde puedo checar ese código? :)

  • Myri - 29 noviembre, 2013 reply

    hola me puedes ayudar me sale una cxudricula en el emulador pero en el telefono me sale q la plicacion no se puede instalar como soluciono esto…

    Ber - 12 diciembre, 2013 reply

    Hola,
    No se muy bien a que te refieres, si me das más detalles.
    Saludos

  • Luciano - 28 enero, 2014 reply

    Ber. No encuentro lo que pusiste, tanto la aplicacion JAVA para que el movil envie datos cada 20 seg, a una base de datos MySql alojada en un servidor web. Quiero empezar a hacer todo de cero. Gracias.

  • jose - 29 abril, 2014 reply

    hola me parese interesante esto pero lo que estado buscando es algo diferente, lo que yo e estado buscando es como rastrear un gps desde mi android con una apk, sin embargo lo unico que e econtrado es como ver mi localizacion y eso no es lo que busco espero puedan ayudarme gracias.

    Ber - 30 abril, 2014 reply

    Hola,
    Si lo que quieres es rastrear móviles, prueba con android lost, o similar, igual alguna de estás aplicaciones tiene el código abierto.
    Suerte!

  • Jesus miguel - 17 mayo, 2014 reply

    Buenas noches. Soy uno de los fundadores del proyecto bolirut. http://www.bolirut.com (mapas para garmin, navitel, ) hace meses que buscamos un tutorial o algo por el estilo para crear una aplicacion de navegador gps con búsqueda de calles, puntos de interés, ciudades etc como garmin o tomtom, pero no encontramos nada, queremos crear un nuevo formato de mapa, por ejemplo un .blt o no se pero tampoco encontramos como. Alguna idea de que páginas existen tutoriales para crear formatos y app de navegación? Nosotros usamos el formato básico que usan todas las empresas de Gps. polishformat (formato polaco)
    Un cordial saludo.
    Se les agradece de antemano.

    Ber - 17 mayo, 2014 reply

    Hola,

    En referencia a formatos de mapas me temo que no te puedo ayudar mucho, no obstante para crear aplicaciones de navegación puedes encontrar algunos tutoriales por la red, en el blog mostramos varios post para dibujar mapas sobre Google maps, pero no sobre navegación. Entiendo que para la navegación tendrás que tener en cuenta muchas otras cosas más, como puede ser si existen carreteras, dirección etc. Y eso va a complicarlo considerablemente.

    Mucha suerte con el proyecto.
    Un saludo,

  • Jr - 25 mayo, 2014 reply

    Hola disculpa, oye donde tienes ese codigo para ver los puntos enviados desde un android a un server web dibujando en el mismo la ruta donde ha pasado el móvil?

  • Manuel Eduardo Banuelos - 28 mayo, 2014 reply

    Tengo una duda o mas bien no c como comenzar a desarrolar , quiero que en mi android me grabe la latitud y longitud en una base de datos externa y a la vez que muestre en donde esta esa persona, es decir estilo ruta de taxi ( pero aqui seria la ubicacion de un telefono celular su gps ) y que a la vez este activado siempre y no tenga forma de desactivarlo sino por medio de una clave. para que se pueda grabar en donde estubo donde o como comenzar se manejar eclipse ??? podras darme unos tips y en que lugar Gracias

    Ber - 30 mayo, 2014 reply

    Hola,
    Te aconsejo que le eches un ojo a algún curso gratuito que esté bien, por ejemplo este que es de la universidad de Valencia:
    http://miriadax.net/web/android_programacion

    De todas maneras, si quieres te puedo poner en contacto con desarrolladores de Android por si te interesa comprar la aplicación que quieres hacer.
    Un saludo,

Join the conversation


+ seis = 7