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.
Luego hay que habilitar el acceso al API de google maps a nuestro proyecto.
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.
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.
keytool -list -v -keystore ruta_para_la_llave_de_release
Luego hay que generar un API KEY para poder usarlo desde nuestra aplicación.
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
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
<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
<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.
<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.
/** **/ 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:
/** **/ 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 )
<?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>