Está en la página 1de 20

TEMAS AVANZADOS DE ANDROID

MAPAS Y GPS
Temas avanzados de Android

TEMAS AVANZADOS DE ANDROID


MAPAS Y GPS

Conocemos de sobra Google Maps y todas sus posibilidades. Google Maps es


una herramienta de búsqueda de ubicaciones que permite geolocalizar un punto
concreto, calcular rutas, encontrar los lugares de interés más cercanos o ver la
apariencia de un lugar a pie de calle a través de Google Street View. Fue
desarrollada en 2005, inicialmente para Internet Explorer y Mozilla Firefox en PC.
Sin embargo, su uso se ha generalizado de la mano de los smartphones y ha
sido entonces cuando ha pasado a convertirse en un elemento fundamental para
hacer SEO local. Google Maps funciona tanto para ordenadores como para
dispositivos móviles (teléfonos y tabletas), pero es en los smartphones en los
que se obtiene su máximo rendimiento por la facilidad para encontrar un punto
en un traslado y la posibilidad de observar la ubicación del propio usuario a
tiempo real.

Con Android Studio podemos usar las ventajas que nos ofrece la geolocalización
y podremos crear mapas con puntos señalados entre otras funciones.

Vamos a realizar un ejemplo de cómo poner un mapa en nuestra aplicación y


luego marcar un punto de interés.

Para poder usar la geolocalización de Android nos requiere de una API Key que
es un número identificador que nos exige Goolge para usar su API de forma
gratuita.
Así que nos damos de alta en:
https://console.cloud.google.com
Y aquí creamos un nevo proyecto:

1
Temas avanzados de Android

Seleccionamos nuestro proyecto:

Vamos a API y servicios:

Y aquí habilitamos “APIS Y SERVICIOS”:

Y buscamos “Maps SDK for Andorid”:

Es muy posible que aparezca el primero de la lista, de no ser así podemos usar
el buscador.
Y le damos en “Habilitar”:

2
Temas avanzados de Android

Una vez que lo hemos habilitado vamos a crear el API Key que vamos a
necesitar. Nos vamos al menú principal clickando en “Google Cloud”:

Y en este menú principal vamos a “API y servicios>Credenciales”:

Y en la pantalla que nos muestra le damos a “+CREAR CREDENCIALES>


Clave API”:

T nos generará nuestra clave API:

3
Temas avanzados de Android

Una vez que la tenemos, la copiamos porque nos hará falta en cuanto hayamos
creado una aplicación nueva: “Mapas” para esto creamos un proyecto nuevo en
Android Studio con una plantilla “Empty Activity”:

Antes de continuar, tenemos que ver si nos hemos descargado el paquete de


servicios de Google “Google Plays Services”. Si es la primera vez que usas el
Android Studio no estará descargado.

4
Temas avanzados de Android

Para lo que nos vamos a Tools>SDK Manager

Nos abre una la ventana del “SDK Manager” y vamos a la parte de “Android SDK
>SDK Tools”. Ahí comprobamos si lo tenemos instalado o no. Si no lo tenemos
lo seleccionamos y le damos a “OK” para que comience la descarga.

5
Temas avanzados de Android

Nos abrirá una venta de descarga que cuando finalice le daremos a “Finish”.

Ya tenemos todo lo que necesitamos instalado y hemos obtenido nuestra clave


API ahora nos vamos dentro de “Poryect” a app>src>main>res>values y
creamos un nuevo fichero del tipo “Values Resource File” con el nombre
“google_mapa_api”.

6
Temas avanzados de Android

En este sitio será donde almacenaremos nuestra API Key, así que hay que
añadir el siguiente código, añadiremos una “String” dentro de “resources con el
nombre de “Google_maps_key” que tendrá varias restricciones para que no nos
modifique nunca el “API Key” que también estará en este “String” de la siguiente
manera:

Este es nuestra clave de API

Ahora tenemos que añadir la librería de Google Maps, para esto nos vamos a
app>build.gradle y añadimos una dependencia predefinida por Google Maps que
contiene la librería que deseamos, es la que aparece en el código:

Añadimos este código y le damos a “Sync Now”

7
Temas avanzados de Android

Como ya tenemos el recurso creado, debemos decirle a nuestro proyecto


Android que ya tenemos una API Key válida, es por ello que iremos al fichero
“AndroidManifest.xml” y dentro de la etiqueta <application> añadiremos nuestra
propia etiqueta.

8
Temas avanzados de Android

Añadimos un meta-data para que localice nuestra “String” con la API Key:

Ya con todo configurado es el momento de empezar a implementar el mapa.


Iremos a “activity_main.xml” y sustituiremos el contenido del “layout” que nos
viene por defecto por un componente “fragment”. Con esto le estamos diciendo
que sea de tipo “com.google.android.gms.maps.SupportMapFragment”, que es
un “fragment” que viene dentro de la librería que instalamos anteriormente.

9
Temas avanzados de Android

Ahora es el turno de nuestra clase “MainActivity.kt”. Lo primero que haremos


será crear una función llamada “createMapFragment()” que será la encargada
de inicializar el “fragment” que hemos creado en el layout anterior. Esta función
la llamaremos desde el método “onCreate()”.

Ahora ya podemos probar la aplicación en el emulador:

Este dispositivo no soporta


Google Play Services

10
Temas avanzados de Android

Al darle al emulador nos sale un aviso comunicándonos que ese dispositivo no


soporta los servicios de Google Play por lo que tenemos que crear un AVD que
sí nos lo soporte. Nos vamos a “Device Manager”>”Create Device”:

Tenemos que seleccionar uno que soporte Google Play Service, que nos lo
indica en la columna “Play Store”:

11
Temas avanzados de Android

Descargamos la API recomendada si no la tenemos

Y esperamos a que la instalación termine.

12
Temas avanzados de Android

Una vez descargada la API, le damos a “Next” para continuar:

Y en la siguiente pantalla mantenemos la configuración por defecto y pulsamos


“Finish”:

13
Temas avanzados de Android

Y ya nos aparece otro dispositivo en nuestra lista:

Ahora volvemos a probar la app en este dispositivo nuevo mediante el botón


“Run app” y conseguimos que se vea nuestro mapa:

14
Temas avanzados de Android

A[Autor]hora vamos a crear una función que nos permita ir a una localización en
concreto del mapa cuando ejecutemos la app.
En la ventana “MainActivity.kt” tienes que escribir el siguiente código:

Creamos una función que va a llamar un punto de geolocalización a través de un


“Marker” al cual le habremos puesto las coordenadas del sitio que queramos.
Para esto le creamos una variable “coordinates”.

En mi caso voy a ubicar las coordenadas en la ciudad de Tokyo, en el barrio de


Akihabara.
Para conseguir las coordenadas con vamos al Google Maps y clickamos en una
ubicación y nos dará las coordenadas:

Marcamos una posición

Y nos da las coordenadas,


en mi caso son:
35.702606, 139.774485

15
Temas avanzados de Android

Con esto hemos añadido unas coordenadas y una etiqueta con el nombre que
nosotros hemos querido al mapa y en el emulador se ve así una vez hemos
clickado sobre el marcador:

Cómo conocer la ubicación más reciente

Con las API de ubicación de los Servicios de Google Play, tu app puede solicitar
la ubicación más reciente del dispositivo del usuario. En la mayoría de los casos,
te interesará la ubicación actual del usuario, que suele equivaler a la ubicación
más reciente del dispositivo.

Usa específicamente el proveedor de ubicación combinada para obtener la


ubicación más reciente del dispositivo. Este proveedor es una de las API de
ubicación de los Servicios de Google Play. Administra la tecnología de ubicación
subyacente y es una API simple que te permite especificar requisitos (como
precisión alta o poca energía) a nivel general. También optimiza el uso de la
batería del dispositivo.

Vamos a mostrar cómo realizar una solicitud simple de la ubicación del


dispositivo mediante el método “getLastLocation()” en el proveedor de

16
Temas avanzados de Android

ubicación combinada. Para esto el proyecto de desarrollo de nuestra app debe


incluir los Servicios de Google Play.

Las apps cuyas funciones usan servicios de ubicación deben solicitar permisos
de ubicación, según los casos prácticos de cada función, a fin de proteger la
privacidad del usuario.

Cuando solicites permisos de ubicación, sigue las mismas prácticas


recomendadas para cualquier otro permiso de tiempo de ejecución. Una
diferencia importante cuando se trata de permisos de ubicación es que el sistema
incluye varios permisos relacionados con la ubicación. Los permisos que solicites
y el modo en que los solicites dependerán de los requisitos de ubicación del caso
de uso de tu app.
Cada permiso tiene una combinación de las siguientes características:

• Categoría: Ubicación en primer plano o segundo plano.


Ubicación en primer plano:

Si tu app contiene una función que comparte o recibe información de


ubicación solo una vez o durante un tiempo definido, esa función requiere
acceso a la ubicación en primer plano. Un ejemplo podría ser que, dentro
de una app de navegación, una función permitiese a los usuarios obtener
instrucciones paso a paso. Otro ejemplo sería que, dentro de una app de
mensajería, una función permitiera a los usuarios compartir su ubicación
actual con otro usuario.
Ubicación en segundo plano:
Una app requiere acceso a la ubicación en segundo plano si una función
dentro de la app comparte constantemente la ubicación con otros usuarios
o usa la API de “geovallado”. Un ejemplo podría ser que, dentro de una
app familiar para compartir la ubicación, una función permitiera que los
usuarios compartan la ubicación de forma continua con los miembros de
la familia.

• Precisión: Ubicación precisa o aproximada.


Android admite los siguientes niveles de precisión de la ubicación:
Aproximada:

Proporciona una estimación de la ubicación del dispositivo. Si esta


estimación de la ubicación es de “LocationManagerService” o de
“FusedLocationProvider”, la estimación es exacta en un radio de 3
kilómetros cuadrados. Tu app puede recibir ubicaciones con este nivel de

17
Temas avanzados de Android

precisión cuando declaras el permiso “ACCESS_COARSE_LOCATION”,


pero no el permiso “ACCESS_FINE_LOCATION”.
Precisa:

Proporciona una estimación de la ubicación del dispositivo que sea lo más


precisa posible. Si la estimación de la ubicación es de
“LocationManagerService” o “FusedLocationProvider”, suele ser de 50
metros y, a veces, tan precisa como de unos pocos metros o mejor. Tu
app puede recibir ubicaciones en este nivel de precisión cuando declaras
el permiso “ACCESS_FINE_LOCATION”.

Para generar un cliente de servicios de ubicación creamos una instancia del


cliente de proveedor de ubicación combinada dentro del método “onCreate()” de
nuestra actividad. Debería quedar un código así:

Una vez que hayamos creado el cliente de servicios de ubicación, podremos


obtener la ubicación más reciente del dispositivo de un usuario. Cuando se
conecte nuestra app, podremos usar el método “getLastLocation()” del proveedor
de ubicación combinada para obtener la ubicación del dispositivo. Se determina
la precisión de la ubicación que muestra esta llamada por la configuración de
permisos que se ha establido en el manifiesto de la app.

Para solicitar la ubicación más reciente, llama al método “getLastLocation()”. En


el siguiente fragmento de código, se muestra la solicitud y un manejo simple de
la respuesta:

El método “getLastLocation()” muestra un elemento “Task” que puedes usar para


obtener un objeto “Location” con las coordenadas de latitud y longitud de una

18
Temas avanzados de Android

ubicación geográfica. El objeto de ubicación puede ser “null” en las siguientes


situaciones:

• La ubicación está desactivada en la configuración del dispositivo. El


resultado podría ser “null” incluso si ya se había obtenido la ubicación más
reciente, porque, cuando se inhabilita la ubicación, también se borra la
caché.

• El dispositivo nunca registró su ubicación, que podría ser el caso de un


dispositivo nuevo o un dispositivo en el que se restableció la configuración
de fábrica.

• Se reiniciaron los Servicios de Google Play en el dispositivo, y ningún


cliente de proveedor de ubicación combinada activo solicitó la ubicación
después de que se reiniciaron los servicios. Para evitar esta situación,
puedes crear un nuevo cliente y solicitar actualizaciones de ubicación por
tu cuenta.

“FusedLocationProviderClient” proporciona varios métodos para recuperar


información sobre la ubicación del dispositivo. Elige la mejor estimación de
ubicación con una de las siguientes opciones, según el caso de uso de tu app:

• “getLastLocation()” obtiene una estimación de la ubicación más rápido y


minimiza el uso de batería que se puede atribuir a tu app. Sin embargo, la
información de ubicación podría estar desactualizada si ningún otro
cliente usó de manera activa la ubicación recientemente.

• “getCurrentLocation()” obtiene una ubicación más actualizada y precisa, y


de manera más coherente. Sin embargo, este método puede generar en
el dispositivo un cálculo activo de la ubicación.
Esta es la forma recomendada de obtener una ubicación nueva, siempre que sea
posible, y es más segura que otras alternativas, como iniciar y administrar
actualizaciones de ubicación por tu cuenta con “requestLocationUpdates()”. Si tu
app llama a “requestLocationUpdates()”, a veces puede consumir grandes
cantidades de energía si la ubicación no está disponible o si la solicitud no se
detiene correctamente después de obtener una ubicación nueva.

19

También podría gustarte