Google Maps Android

Las aplicaciones con mapas y móviles es como el «hello word» en cualquier lenguaje de programación todo el mundo quiere que su aplicación tenga mapas y mas aun su aplicación se basa en torno a mapas y localizaciones. Pues este es otro tutorial de como manejar mapas de google con android.

Primeros Pasos.

Crear su proyecto con eclipse o cualquier IDE usen para programar android.
Una vez creado el proyecto ir a la consola de google project y ahi crear un nuevo proyecto.

Google_Developers_Console

Luego hay que habilitar el acceso al API de google maps a nuestro proyecto.
Google_Developers_Console

Para generar nuestra key hay que obtener el SHA-1 de nuestro debug-key de android que a menos que no hayas creado una nueva lo podrás obtener de esta manera.

001
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -   keypass android

En caso de que sea para desplegar la aplicacion para el Play-Store deberan usar la misma llave tanto para generar el APK como para generar el MAP_KEY.

001
keytool -list -v -keystore ruta_para_la_llave_de_release

Luego hay que generar un API KEY para poder usarlo desde nuestra aplicación.
Google_Developers_Console

Google_Developers_Console

Una vez generado nuestra key y todo lo demas podemos avanzar a configurar nuestro proyecto en eclipse.

Primero hay que incluir el «Google play service» a eclipse.

    Este proyecto se encuentra en «sdk-folder/extras/google/google_play_services/libproject»

Luego agregar el «Google play service» a nuestro projecto como libreria

      click secundario sobre nuestro proyecto => build path => configure build path

 

    Android => library => add library

Properties_for_DeveloperMap

Luego de Agregar esa libreria hay que agregar esta meta data a nuestor «manifest.xml» dentro de la seccion de «application«.

La clase donde tenga su mapa debe extender de FragmentActivity

001
002
003
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="la_key_generada_en_developer_console" />

Permisos necesarios para que nuestra aplicacion funciones

001
002
003
004
005
006
007
008
009
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--
 The following two permissions are not required to use
 Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Ahora solo nos queda incluir nuestro mapa en algún layout.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.developermap.MainActivity$PlaceholderFragment" >
 
    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</RelativeLayout>

Una vez realizado todo esto podemos correr nuestro projecto y nos mostrara un mapa en nuestra actividad.

[image map]

 

Marcadores

Para agregar un marcador a nuestro mapa basta con optener la referencia de nuestro mapa y agregando una instancia de «MarkerOptions» al mismo.

Position: sera la posicion donde aparecera el marcador en el mapa (latitud – longitud)

Title : Es esl titulo que aparecera una vez sea clickeado el marcador.

Snippet: Es un texto extra que aparece debajo del titulo, sera como una descripcion.

Icon: Si esta opcion no es asignada sera tomado uno por defecto que es un icono de location negro.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
/**  **/
 
        FragmentManager manager = getSupportFragmentManager();
        SupportMapFragment supoortMapFragment = (SupportMapFragment)manager.findFragmentById(R.id.map);
 
        GoogleMap map = supoortMapFragment.getMap();
 
        map.addMarker(new MarkerOptions()
           .position(new LatLng(0,0))
           .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
           .title("Hola")
           .snippet("Descripcion"));
 
/**  **/

 

Custom layout para un marcador:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
/**  **/
 
    map.setInfoWindowAdapter(new InfoWindowAdapter(){
 
        @Override
        public View getInfoContents(Marker arg0) {
 
            return null;
        }
 
        @Override
        public View getInfoWindow(Marker arg0) {
 
            LayoutInflater inflater = ((LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE));
 
            View view = inflater.inflate(R.layout.custom_layout, null);
 
            return view;
        }
    });
 
/**  **/

Custom Layout ( custom_layout.xml )

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:padding="10dp"
    android:orientation="vertical" >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hola mundo"
        android:textStyle="bold" />
 
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
 
</LinearLayout>

Android map v2
Github Project