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.
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.
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
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 > |