Tutorial GPS en Android con Eclipse

Tutorial GPS en Android Utilizando Adt Bundle Eclipse

Al final de este tutorial tendremos una pantalla que capture y muestre la latitud, longitud y presición de nuestra posición actual.

Pasos:
1. Tener instalado lo siguiente:
  • SDK Adt Bundle Eclipse, descarga la ultima versión de aquí.
  • JDK: (Java Development Kit), descarga la ultima versión de aquí
2. Crear un proyecto nuevo con nombre "CoordenadasGPS" y dar click en Next

3. Elegir un icono para el aplicativo, pueden buscar en google cualquier imagen y para escogerlo le dan en el botón "browse", luego dar click en Next, Next, y Finish.




4. Definiendo el layout: La pantalla tendrá básicamente 3 TextView (latitud, longitud, presicion) y 2 Buttons (activar, desactivar)
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="#4D4D4D"
     android:padding="10dp" 
     android:orientation="vertical"
     tools:context=".MainActivity" >

  <RelativeLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#A4C639"
      android:padding="5dp" >

  <TextView
      android:id="@+id/LblPosicion"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Posicion actual:" />

        <TextView
            android:id="@+id/LblPosLatitud"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/LblPosicion"
            android:layout_marginBottom="5dp"
            android:background="#aaaaaa"
            android:padding="5dp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/LblPosLongitud"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/LblPosLatitud"
            android:layout_marginBottom="5dp"
            android:background="#aaaaaa"
            android:padding="5dp"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/LblPosPrecision"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/LblPosLongitud"
            android:layout_marginBottom="5dp"
            android:background="#aaaaaa"
            android:padding="5dp"
            android:textColor="#000000" />
        
        <Button
            android:id="@+id/BtnActualizar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/LblPosPrecision"
            android:text="Activar" />

        <Button
            android:id="@+id/BtnDesactivar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/BtnActualizar"
            android:text="Desactivar" />

  </RelativeLayout>

</FrameLayout>

5. Definiendo el la clase MainActivity.java: (ver los comentarios para comprender que hace cada cosa)

package com.example.coordenadasgps;

//Estos 3 imports son necesarios para usar GPS
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.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
 private Button btnActualizar;
    private Button btnDesactivar;
    private TextView lblLatitud; 
    private TextView lblLongitud;
    private TextView lblPrecision;
    
    private LocationManager locManager;
    private LocationListener locListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);
     
     //Se captura los 2 botones y los 3 TextView de la pantalla
        btnActualizar = (Button)findViewById(R.id.BtnActualizar);
        btnDesactivar = (Button)findViewById(R.id.BtnDesactivar);
        lblLatitud = (TextView)findViewById(R.id.LblPosLatitud);
        lblLongitud = (TextView)findViewById(R.id.LblPosLongitud);
        lblPrecision = (TextView)findViewById(R.id.LblPosPrecision);
        
        //Creamos un listener onClick para los botones actualizar y desactivar
        //estos se disparan cuando se clickea(touch) el respectivo botón
        btnActualizar.setOnClickListener(new OnClickListener() 
        {
         public void onClick(View v) 
         {
          Toast.makeText(getApplicationContext(), "Comienza localización...", Toast.LENGTH_SHORT).show();
          comenzarLocalizacion();
            }
        });
        
        btnDesactivar.setOnClickListener(new OnClickListener() 
        {
             public void onClick(View v) 
             {
              locManager.removeUpdates(locListener);
              Toast.makeText(getApplicationContext(), "Desactivadas las actualizaciones!", Toast.LENGTH_SHORT).show();
             }
        });
    }
        
    //Creamos un método que dispara eventos del GPS
    private void comenzarLocalizacion()
    {
        //Obtenemos una referencia al LocationManager
       locManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            
        //Instanciamos el locListener que nos permite escuchar al GPS
        locListener = new LocationListener() 
        {
         public void onLocationChanged(Location location) 
         {
          //Aqui mostramos los datos de la posicion que se encuentran en "location"
          mostrarPosicion(location);
         }
         
   @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
   }
        };
        
        //El LocationManager administra el GPS, por ejemlo:
        //Realiza solicitudes de actualización cada 15000 milisegundos (15 segundos)
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 15000, 0, locListener);
    }
     
    private void mostrarPosicion(Location loc) 
    {
            if(loc != null)
            {
                    lblLatitud.setText("Latitud: " + String.valueOf(loc.getLatitude()));
                    lblLongitud.setText("Longitud: " + String.valueOf(loc.getLongitude()));
                    lblPrecision.setText("Precision: " + String.valueOf(loc.getAccuracy()));
            }
            else
            {
                    lblLatitud.setText("Latitud: No hay datos");
                    lblLongitud.setText("Longitud: No hay datos");
                    lblPrecision.setText("Precision: No hay datos");
            }
    }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}

6. Configurar el AndroidManifest.xml: Nos situamos en la pestaña de permisos del manifest y agregamos un nuevo permiso de tipo "Uses permission" y escogemos "android.permission.ACCESS_FINE_LOCATION"

o nos vamos a la vista de edición xml y escribimos la siguiente linea:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

7. Correr la aplicación como "Android Application"
Si lo corres en el AVD(Android Virtual Device) es probable que no muestre coordenadas del GPS por lo que tendrás que pasar la apk a un dispositivo que posea GPS, deberá quedar algo como esto:

La fuente la puedes descargar dando click aquí

Comentarios

  1. Bacan men... q aportes con este tipo de aplicaciones... asi no olvodas lo aprendido y continuas practicando

    ResponderEliminar
  2. Ese es el propósito compañero, compartir conocimientos y así también perdura lo aprendido

    ResponderEliminar
  3. excelente para los que vamos comenzando, lo estudiare bastante, Gracias :D

    ResponderEliminar

Publicar un comentario