Fragments, Google Maps API y Sensores - Appmaster.es Fragments, Google Maps API y Sensores - Appmaster.es

Fragments, Google Maps API y Sensores

Fragments, Google Maps API y Sensores

Fragments, Google Maps API y Sensores

En sesiones previas del módulo de Android ya estudiamos los Activities y su ciclo de vida. Aprovechamos los conocimientos adquiridos en el Máster en Mobile Business para profundizar un poco más e introducir otro elemento más a la mezcla que aportará versatilidad nuestras apps: los fragments. A propósito de los fragments también tuvimos oportunidad para configurar y empezar a trabajar con los mapas de Google en nuestras apps para Android, de ver cómo acceder a la información de los sensores de nuestro smartphone y a los proveedores de localización.

¿Qué son los Fragments?

Podemos ver un fragment como una parte modular de una Activity, que representa un comportamiento de la misma. En un Activity se pueden combinar uno o varios fragments. Los fragments tienen que ir siempre dentro de una Activity aunque tiene su propio ciclo de vida. El uso de fragments aporta modularidad a nuestras apps para Android y ayuda a crear interfaces más dinámicas y adaptables a los distintos tamaños de pantalla.

En clase hicimos una app de ejemplo para representar un listado clicable que mostrase el detalle del objeto de la lista seleccionado. Mediante el uso de fragments y las carpetas de recursos de Android conseguimos, sin necesidad de repetir código, mostrar diferentes interfaces según el tipo de dispositivo empleado. Por ejemplo mostrar en una tablet o dispositivo con gran diagonal el listado y el detalle en una misma pantalla mientras que para dispositivos estándar mostramos primero el listado y posteriormente pasamos a la pantalla de detalle al clicar.

Algunas vistas basadas en Fragments

  • ViewPager: permite cambiar de vista/pantalla a modo de paso de página al deslizar el dedo sobre la pantalla. Cada página es un fragment en sí misma.
  • SlidingPanelLayout: se trate de un layout que al mostrarse desplaza el contenido principal de la vista hacia la derecha. Se suele emplear en arquitecturas maestro-detalle como la del ejemplo de clase del listado.
  • MapFragment: es la forma más sencilla de colocar un mapa en una app. Es un contenedor de una vista de mapa que automáticamente maneja las necesidades del ciclo de vida.

Trabajando con Google Maps API

Después de estudiar el ciclo de vida de los fragments y sus principales aplicaciones aprovechamos para empezar a trabajar con los mapas de Google. Los pasos necesarios para poder mostrar mapas en una aplicación Android son los siguientes:fragments google maps

  1. Instalar el Android SDK.
  2. Descargar y configurar el Google Play Services SDK desde el SDK Manager.
  3. Obtener una API key para nuestro proyecto desde Google Developer Console.
  4. Configurar el Manifest con nuestra API key y los permisos necesarios.
  5. Insertamos un mapa.

Una vez realizado todo el proceso de configuración somos capaces de añadir un mapa en nuestra app insertando en un layout el fragment de mapa. A través del propio layout definimos el estado inicial del mapa, como las coordenadas y el zoom. Después de presentar un mapa básico pasamos a añadir marcadores a nuestro mapa y a personalizar los diálogos informativos o InfoWindows que aparecen al pulsar en los marcadores presentes en nuestro MapFragment.

Utilizando los sensores de nuestro Smartphone y los proveedores de localización

Android nos proporciona acceso a multitud de sensores, siempre y cuando los incorpore nuestro dispositivo. Los sensores  están divididos en tres categorías:

  • Sensores de movimiento: acelerómetro, giroscopio,…
  • Sensores de entorno: termómetro, sensor de presión,…
  • Sensores de posición: sensor de orientación, magnetómetro,…

Accedemos a todos estos sensores a través del framework de sensores que contiene las clases necesarias para acceder a la información que nos facilitan los sensores. El componente central de este framework es el servicio de sistema SensorManager.

Realizamos un ejemplo práctico que nos permite reconocer gestos en la pantalla de nuestro Smartphone. Para ello hicimos uso de la app Gesture Builder que permite generar gestos que luego podremos reconocer desde nuestra aplicación con un layout especial, el GestureOverlayView.

De manera análoga al uso de los sensores realizamos un proyecto de ejemplo para trabajar con los servicios de localización solo que esta vez utilizamos el servicio de sistema LocationManager en lugar de SensorManager. A través de LocationManager podemos acceder a dos proveedores de localización: NETWORK_PROVIDER para localización aproximada por wifi y GPS_PROVIDER para una localización más exacta a través del GPS de nuestro dispositivo. Estudiamos casos de uso típicos donde es más adecuado uno u otro y también algunos casos donde es interesante combinar ambas estrategias.

The following two tabs change content below.

Fran Gilberte

2 thoughts on “Fragments, Google Maps API y Sensores

  1. Nitram

    Estoy empezando, por lo que espero seais comprensivos/copasivos conmigo.
    Veréis, estoy programando una aplicación android de manera que la transición entre los distintos layouts la hago mediante fragments para poder controlar correctamente la ejecución tanto en smartphines como en tablets, de forma que en el tablet salen todos los fragments y en el smartphone de uno en uno dependiendo de la opcións seleccionada.
    Mi problema está en los smartphone, ya que al girar el movil se re-crea el fragment y me lo duplica por lo que al interactuar con él me da error. Buscando encontré una solución, que es destruir el fragment (remove), pero me da nuevamente error diciendo que no se puede hacer “after saveinstance” o algo así, colgándose todo al interactuar con él dando nullpointererror. En concreto es un mapa google que responde a los clicks sobre él. La primera vez funciona correctametne, pero al girar la pantalla ya da el nulpointererror al clickar… creo que el comando remove no está funcionando. Los fragmets los añado al backstage, de forma que si despué sde girar le doy apra atras todo funcina como debe… por lo que está claro que el remove no va…

    Alguna idea?? Solución?? Explicación que pueda seguir para conseguir transiciones entre fragments correctas incluso girando l apantalla??

    Un saludo y muchas gracias por llegar a leer esto.

    1. Fran Gilberte Post author

      Hola Nitram,

      Un fragment está asociados a una Activity y por lo tanto a su ciclo de vida. Cuando giras la pantalla y pasas de modo portrait (vertical) a landscape(horizontal) la activity vuelve a entrar por el callback onCreate() de su ciclo de vida. El problema es que cuando esto pasa al entrar por el onCreate vuelves a crear una nueva instancia del fragment donde tienes el mapa. Necesitas guardar la instancia de tu fragmente usando el callback del ciclo de vida OnSaveInstanceState() y controlar en el onCreate() cuando lo creas por primera vez o cuando lo restauras.

      http://android.okhelp.cz/wp-content/uploads/life_cycle_onRestoreInstanceState.png

      Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada.