sábado, 22 de diciembre de 2012

Comenzando con Google Maps API v2 parte 1



Desarrollo sobre la plataforma Android



Hola a todos nuevamente, en este post vamos a hablar de nuevo de Google Maps en Android, pero esta vez, vamos a ver el uso de la API v2 de Google Maps, ya que la versión 1 ya quedó deprecated :D , asi que vamos a tener que volver a ver que vamos a necesitar, configurar el uso de la API y después vamos a realizar un par de cosas que creo que nos van a resultar bastante útil, como es, que nuestro mapa se ubique en la posicion donde nos encontramos, y también como marcar algunos punto interesantes en el mapa.
En esta ocasión además de utilizar la API de Google, también vamos a utilizar un sistema de persistencia de datos, en este caso SQLite, el motor de base de datos que trae por defecto Android. Si tiene alguna duda con ello, pueden mirar esta serie de post:


http://www.aprendiendodeandroidymas.com/2012/04/persistencia-de-datos-con-sqlite-sobre.html

Cualquier consulta,tratare de ayudarlos en lo que pueda :) así que ahora comencemos con lo nuestro y cualquier cosa, realicen un comentario.
Antes que nada vamos a necesitar, instalar Google Play Service, ya que para poder usar Google Maps ahora, es un poco diferente a la versión anterior, así que con el SDK manager, la descargamos:




Después, al igual que en la anterior versión vamos a necesitar el hash de nuestra key para firmar la app, pero esta vez en vez de MD5 va a ser el SHA1, para eso en la terminal tipeamos el siguiente comando:
keytool -list -v -keystore ~/.android/debug.keystore
(por las dudas les recuerdo, que al igual que en la anterior versión de la API, esta key solo sirve para el desarrollo, para que la app la puedan subir a Google Play, deberán generar un nuevo certificado, todo esto esta explicado en el anterior post ;)
Al ejecutar el comando, se debería ver una salida de consola, similar a esta:




Una vez tenemos el hash de nuestro certificado, deberemos (a diferencia de la anterior versión de la API) ir a nuestra  Consola de Google API, ingresando en la siguiente dirección:https://code.google.com/apis/console



Una vez que hayamos, ingresado, vamos arriba a la derecha, desplegamos el panel y creamos un nuevo proyecto, con el nombre que nosotros deseemos. Ahora deberás ir a la opción Service y activar la opción Google Maps Android API v2 y aceptamos los términos de servicios ;)




Con estos pasos, ya no nos queda mucho para terminar de configurar el proyecto, así que vamos directamente a obtener la KEY, vamos entonces arriba a la derecha, seleccionamos API Access y hacemos click en create new Android key.





En el formulario que nos aparece, deberemos poner el hash SHA1 que antes obtuvimos, y además el nombre del package de nuestro proyecto separado por un punto y coma, algo similar a esto:
22:74:RE:3E:7C:11:B2:07:46:EB:07:84:32:59:3C:6A:89:7E:16:96;com.aprendiendodeandroid.rosario

Y luego de eso, obtendremos algo similar a esto:




Así que con esto ya tenemos la key necesaria para nuestro proyecto, como en la anterior API, ahora esta key debemos agregarla a nuestro AndroidManifest dentro de los tag <application> y </application>


<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="AkjnasASSGectCsZjY9JZEasdjnklnsdgIjJJJHgbbs"/>



Y debemos agregar los siguientes permisos:

<permission
         android:name="com.aprendiendodeandroid.rosario.permission.MAPS_RECEIVE"
         android:protectionLevel="signature"/>
       <uses-permission android:name="com.aprendiendodeandroid.rosario.permission.MAPS_RECEIVE"/>


Por supuesto que ustedes deberán colocar allí el nombre de su package name, y reemplazar el mío ;) Una vez realizado esto, salvamos el manifest, y tenemos todo configurado para usar la API.
Por las dudas les advierto, que esta API requiere, como minimo la version de Android 2.2 y soporte para Open GL ES versión 2

Tambien les comento que estos son los permisos extra que recomienda la gente de Google:



<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Aunque no es estrictamente necesario, y podemos usar solo los que realmente necesitemos. Y también por el requerimiento que posee de Open Gl, recomienda que agreguemos dentro de nuestro manifest:


<uses-feature
 android:glEsVersion="0x00020000"
 android:required="true"/>

Esto es bueno, porque si el smartphone no cumple con esta característica, no le va a funcionar a la persona que instale la app, lo cual puede provocar malos comentarios, lo que no es bueno para nuestra aplicaciòn :D

Ahora lo que deberemos hacer es simplemente configurar nuestro layout y la clase que lo controla, si vamos a usar una versión de Android de la 3 en adelante simplemente la clase debe extender de Activity, pero si lo queremos hacer con una versión anterior de Android, deberemos utilizar las librerías de soporte. Si ese es el caso deberemos extender de ellas, de la siguiente manera:



public class ClasePrincipal extends android.support.v4.app.FragmentActivity {

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


Esto se debe a que debemos utilizar en el layout, fragment, si ya no debemos utilizar MapsActivitys ni nada parecido y en nuestro layout deberemos colocar un código similar a este:


<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/map"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>

Donde solo lo que haremos es colocar un fragment, y especificar la clase a la que corresponde.
Así que con eso, deberías poder ejecutar tu aplicación, y ver el mapa correspondiente.





Aclaración: se me había olvidado de aclarar, para versiones de Android anteriores a la 3 deben poseer entre las librerías de sus proyectos: android-support-v4.jar
Ademas también deberemos poseer las librerías google-play-service.jar  y google-play-service_lib.jar
Estas dos ultimas librerías las obtenemos cuando con el sdk manager descargarmos en los extras Google Play Services. Y las podemos incorporar al proyecto, realizando click boton derecho, import..., Existing Android Code Into Workspace, y allí nos movemos hasta la carpeta donde tenemos instalado el SDK de Android <carpeta-sdk-android>/extras/google/google_play_services/libproject/google-play-services_lib“.
Una vez hayamos importado esto, realizamos nuevamente click botón derecho al proyecto, vamos a propiedades, a la sección Android, bajamos y realizamos click en Add, nos va a agregar la ultima librería que acabamos de agregar al proyecto, ya con esto no deberían tener problemas ;)



Código de ejemplo:
https://github.com/Android-Hispano/android-hispano-demo


Otros post relacionados con el tema:
http://www.aprendiendodeandroidymas.com/2012/12/comenzando-con-google-maps-api-v2-parte_31.html
http://www.aprendiendodeandroidymas.com/2013/04/comenzando-con-google-maps-api-v2-parte.html

Documentación oficial:

https://developers.google.com/maps/documentation/android/?hl=es
http://developer.android.com/guide/topics/location/index.html
https://developers.google.com/maps/documentation/android/?hl=es
https://developers.google.com/maps/documentation/android/reference/index?hl=es

Bueno,esto es todo por ahora, hemos visto cómo insertar nuestro primer mapa de Google en nuestra aplicación utilizando la segunda versión de la API, espero que les alla gustado, nos vemos en otra ocasión ;) y en la próxima vamos a ver caracteristicas realmente útil, voy a ampliar mas sobre el tema, pero el post ya me quedó demasiado extenso :D

Saludos a todos, Gabriel E. Pozo