sábado, 31 de mayo de 2014

Android: Integrar Google Map en nuestra aplicación

Buenas amigos, en este nuevo tema vamos a ver como integrar la API de GoogleMaps en nuestra aplicación android. Bien, es un tema un poco complejo, ya que tenemos que descargar librerías de nuestro sdk manager y obtener una clave de google, pero con paciencia y siguiendo los pasos cuidadosamente, lograremos integrar los mapas de google en nuestra app.




  • Lo primero que vamos a hacer es abrir nuestro SDK Manager para descargar una librería del repositorio de google.



  • Posteriormente nos vamos al final del todo, a la carpeta "extras" y marcamos "Google Play Services"



  • Pulsamos en "Install Packages" para instalar.


NOTA: Cuidado con instalar paquetes que no queráis, puede influir en el funcionamiento de eclipse.

Una vez descargada, vamos a agregarla como librería Android a nuestro proyecto:

  • Pinchamos sobre File/New/Other y elegimos "Android Project For Existing Code"

  • En la ventana que se nos abre, buscamos la ruta donde este nuestra librería "Google Play Services". Tenéis que ir a la carpeta donde tengáis vuestro sdk, y dentro seguir la ruta "sdk\extras\google\google_play_services\libproject\google-play-services_lib"

  • Una vez tengáis vuestra librería agregada, pincháis sobre vuestro proyecto y elegís "preferences", posteriormente, en la ventana que se abre, pincháis en "android" y abajo a la derecha podéis agregar la librería a vuestro proyecto

Una vez tengamos la librería, debemos registrar nuestra app y obtener una clave Google Maps para poder utilizarla en nuestra aplicación.

NOTA: Esto lo hace google para mantener cierto control, ya que una app que al utilizar más de 25.000 veces Google Maps debe de empezar a pagar una cantidad de dinero (pequeña) por cada vez que se utilice de más Google Maps. Esto no supone un problema para una persona con una app, pero si que lo es si 30.000 personas tienen la app y utilizan a menudo Google Maps.

Bien, para obtener una clave para utilizar Google Maps, necesitaremos un código cifrado en SHA-1 que nos proporciona el mismo eclipse:

  • Pinchamos en eclipse en "window/preference" y en la ventana que se abre, pinchamos en "Android/build"

Bueno, ahi os aparecerá vuestro código en SHA-1, lo copiáis en un bloc de notas, para utilizarlo posteriormente.

Ahora, vamos a ir a Google Developer Console  

Una vez en la pagina, pincháis sobre "API Access" y posteriormente pincháis sobre "Create new Android Key"


  • En esta nueva ventana que se abre debéis poner vuestro código SHA-1 seguido de punto y coma ";" y el nombre de nuestro proyecto, quedando de la siguiente forma:
    • XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;com.example.picarcodigo (todo junto).
  • Pulsáis en "create" y ya os ha tenido que generar una key, os aparecerá en un cuadro similar a este.

Bueno, copiáis vuestra key en un bloc de notas para utilizarla posteriormente, vamos a generar algo de código.

Lo primero que debemos hacer cuando creemos nuestro proyecto es agregar permisos a nuestra aplicación:

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.WRITE_EXTERNAL_STORAGE
  • com.google.android.providers.gsf.permission.READ_GSERVICES
  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION

Posteriormente agregamos la siguiente linea de código:


Google Maps utiliza OpenGl para renderizar mapas, si no tenéis instalado OpenGl, es obligatorio ponerlo.

Ahora, continuando con nuestro manifest, debajo de donde tengamos declarada nuestra activity, añadimos 2 meta-data.

En "android:value" del primer meta, pegáis, entre comillas, vuestra clave, quedando de la siguiente manera


Con esto ya, podemos trabajar con Google Maps en nuestra app.

Bien, ahora vais a vuestro archivo xml y agregáis lo siguiente:

Bien, esto no necesita mucha explicación, un fragment donde nos cargará nuestro mapa.

Vamos a ir ahora a nuestra clase para darle funcionalidad.

Bien, en código, como podéis observar, no es difícil:
  • Referenciamos nuestro xml
    • setContentView(R.layout.activity_maps_example);
  • Referenciamos el fragment de nuestro xml mediante la clase "SupportMapFragment"
    • SupportMapFragment fm = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
  • Pasamos nuestro "SupportMapFragment" a la clase GoogleMap para poder manejar los mapas
    • GoogleMap map = fm.getMap(); 
  • Creamos un objeto de la clase LatLng (Latitud y Longitud) para introducir coordenadas (Google Maps trabaja con coordenadas) que introduciremos posteriormente en nuestro mapa
    • LatLng murcia = new LatLng(38.00, -1.12);
  • Activamos nuestra localización
    • map.setMyLocationEnabled(true);
  • Le pasamos las coordenadas y el zoom que nos va a mostrar, en mi caso, 2.0f (float)
    • map.moveCamera(CameraUpdateFactory.newLatLngZoom(murcia, 2.0f));
  • Finalmente, añadimos un marcador de posición
    • map.addMarker(new MarkerOptions()
    •                 .title("Murcia")//Titulo de nuestro marcador
    •                 .snippet("Picarcodigo.blogspot.com")//Informción
    •                 .position(murcia));//Posición.
Bien, si habéis seguido bien los pasos no debéis de tener ningún problema.



4 comentarios:

  1. Hola amigo, muchas gracias por el tutorial, me ha servido muchisimoooo, aunque me salta una duda, eh creado este mapa, me muestra el mapa, la ubicacion y el marcador, pero... como ya vees yo mismo le estoy dando la latitud y la longitud,(como la latitud y longitud de murcia en el tutorial) como puedo hacer para obtenerla solo, me refiero algun metodo para obtenerla automaticamente la latitud y longitud de mi posicion nose, algo asi??

    este es mi codigo:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GoogleMap mapa = ((SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.mapi)).getMap();


    double lati =-oo.ooooo;
    double longi = -oo.ooooo;


    mapa.setMapType(GoogleMap.MAP_TYPE_SATELLITE);

    LatLng casa = new LatLng(lati, longi);
    CameraPosition camp = new CameraPosition.Builder()
    .target(casa)
    .zoom(19)
    .bearing(45)
    .tilt(10)
    .build();


    CameraUpdate camUpd3 =
    CameraUpdateFactory.newCameraPosition(camp);

    mapa.animateCamera(camUpd3);


    mapa.addMarker(new MarkerOptions()
    .title("esta es mi casa !!")
    .position(casa)
    .snippet("dulce hogar"));.

    ResponderEliminar
    Respuestas
    1. Buenas, me encantaría decirte que google maps nos proporciona un método que nos proporcione nuestra latitud y longitud directamente, pero se queda en un simple, "me encantaría". Ni siquiera el repositorio de Android nos proporciona nada parecido, ahora bien, no digo que no se pueda crear un método para obtener nosotros mismos la posición actual de nuestro dispositivo, para ello tendriamos que hacer:

      Conectarnos a un proveedor de red que pueda facilitarnos nuestra latitud y longitud
      Activar el gps
      Obtener datos de localización

      Bien, afortunadamente puedes ver este enlace: http://www.sgoliver.net/blog/?p=1887 donde lo tienen muy bien explicado y te puede orientar en lo que pides, actualmente estoy trabajando en un proyecto y no tengo tiempo para hacer un tema.

      Un saludo, suerte.

      Eliminar
    2. Hola amigo, muchas gracias por tu pronta respuesta, e echare un ojo al material que me envias, muchas gracias :D saludos!

      Eliminar
  2. Gran Explicacion, facil de implementar a la primera salio

    ResponderEliminar