• No results found

Appendix A: Investigation of existing methods for use in the instrument

Servicios basados en localización

L

LOGRO DE LA UNIDAD DE APRENDIZAJEOGRO DE LA UNIDAD DE APRENDIZAJE

Al término de la unidad, el alumno elabora aplicaciones que permitan el uso del servicio basado en localización utilizando Google Maps.

T TEMARIOEMARIO

5.1 Tema 10: Manejo de

5.1 Tema 10: Manejo de fragments (4 horas)fragments (4 horas) 5.1.1 Que es Fragment

5.1.2 Creating a Fragment, administrar Fragments,Flagment class 5.1.3 Toolbar Fragment Talk to the Activity

5.1.4 Eventos fragment, Aplicación fragment 5.2 Tema 11: Servicios basados en localización

5.2 Tema 11: Servicios basados en localización (3 horas)(3 horas) 5.2.1 Utilizar Google Maps en la aplicación.

5.2.2 Obtención de la localización (coordenadas) del dispositivo. 5.2.3 Activar las API de Google Maps.

UNIDAD UNIDAD

5

5

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 22 99

Que es un fragment Que es un fragment

Es una porción de la interfaz que puede añadirse y/o quitarse de la interfaz independientemente de la actividad en curso, un fragmente se puede reutilizar en varias Activities el propósito principal del fragment es poder diseñar varias configuraciones de pantalla y que podamos adaptarlo de acuerdo a la necesidad, adaptándose a la orientación vertical o horizontal con ello reducir el código que podamos generar. Por ejemplo podemos presentar una aplicación cliente de correo electrónico, donde al lado izquierdo debemos tener la lista de correos y al lado derecho mostrar el mensaje de correo, con sus campos clásicosDe y Asunto, y por otro lado debemos mostrar el contenido completo del correo seleccionado. En un teléfono móvil lo habitual será tener una primera actividad que muestre el listado de correos, y cuando el usuario seleccione uno de ellos navegar a una nueva actividad que muestre el contenido de dicho correo. Sin embargo, en un tablet puede existir espacio suficiente para tener ambas partes de la interfaz en la misma pantalla, por ejemplo en un tablet en posición horizontal podríamos tener una columna a la izquierda con el listado de correos y dedicar la zona derecha a mostrar el detalle del correo seleccionado, todo ello sin tener que cambiar de actividad.

Imagen 51

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 130130

Ciclo de vida Ciclo de vida

Al igual que las activity un fragmento tiene un ciclo de vida muy parecido, que el fragmento depende completamente del activity además de tener características adicionales que es muy utilizado en tiempo de ejecución para alterarlos.

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 33 11

Evento Descripción / Funcionalidad

onAttach se ejecuta cuando el fragmento ha sido asociado a la actividad contenedora.

onActiviyCreated Se ejecuta cuando la actividad contenedora ya ha terminado la ejecución de su métodoonCreate()

onCreate Se ejecuta cuando el fragmento se está creando. En el puedes inicializar todos los componentes que deseas guardar si el fragmento fue pausado o detenido.

onCreateView Se llama cuando el fragmento será dibujado por primera vez en la interfaz de usuario. En este método crearemos el view que representa al fragmento para retornarlo hacia la actividad.

onStart Se invoca cuando el fragmento esta visible ante el usuario. Obviamente depende del método onStart() de la actividad para saber si la actividad se está mostrando.

onResume

onResume Es ejecutado cuando el fragmento está activo e interactuando con el usuario. Esta situación depende de la que actividad anfitriona este primero en su estado Resumed.

onStop

onStop Se ejecuta cuando un fragmento ya no es visible para el usuario debido a que la actividad anfitriona está detenida o porque dentro de la actividad se está gestionando una operación de fragmentos.

onPause

onPause Al igual que las actividades, onPause se ejecuta cuando se detecta que el usuario dirigió el foco por fuera del fragmento.

onDestroyView

onDestroyView Este método es llamado cuando la jerarquía de views a la cual ha sido asociado el fragmento ha sido destruida.

onDetach

onDetach Se ejecuta cuando el fragmento ya no está asociado a la actividad anfitriona

La API de los fragmentos se incluye en el API de Android y se encuentra en la clase Fragment

Fragment, por ello cada vez que necesite utilizar se debe extender la clase Fragment en nuestra nueva clase para heredar sus propiedades y comportamientos.

También existen otros librería que se pueden utilizar como  ListFragment

 DialogFragment  PreferenceFragment

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 132132

Código de ejemplo: Código de ejemplo:

public static class FragmentoDemo extends Fragment { @Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// Inflate the layout for this fragment

return inflater.inflate(R.layout.fragmento_Demo, container, false); }

}

El evento onCreateView() recibe como parámetro un objeto de tipo LayoutInflater, el

cual es proveído por la clase anfitriona.

Esta clase es la encargada de inflar el código Java a través del método inflateinflate(). Este recibe como parámetros elrecurso xml del layoutrecurso xml del layout, el contenedor contenedor (en este caso el view de la actividad anfitriona) donde será insertado y una bandera indicando si el view

que se producirá debe incorporarse al contenedor.

Como se ve, hemos usado al archivofragmento_Demo.xmlfragmento_Demo.xml como recurso, el parámetrocontainer container que apunta a la actividad anfitriona y falsefalse para indicar que no indicar que no deseamos comprometer el view del fragmento.

Añadiendo un fragmento a la actividad Añadiendo un fragmento a la actividad

Una vez creada la clase y el layout que representa nuestro fragmento debemos añadirlo a la actividad. Existen dos formas para realizar este proceso. La primera es a través del archivo layout de la actividad. Donde incluiremos un componenteXMLXML de equivalencia para fragmentos llamado <Fragment><Fragment>, el cual referenciará a la clase especifica extendida del fragmento para crear la jerarquía. Veamos un ejemplo:

Creación del primer layout F Creación del primer layout Fragmentragment

El siguiente paso es crear la interfaz de usuario para el primer fragmento que se utilizará dentro de nuestra actividad.

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 33 33

Esta interfaz de usuario tiene que estar en un archivo XML, para ello debes estar en la vista app ira la carpeta es y layout nuevo y lyout resource file como se muestra en el siguiente grafico

Adición de un archivo de recursos de diseño para un proyecto Android Estudio

En el siguiente cuadro de diálogo resultante, nombre el toolbar_fragment diseño y cambiar el elemento raíz de LinearLayout a RelativeLayout antes de hacer clic en Aceptar para crear el nuevo archivo de recursos.

El código fuente inicial es el siguiente:

Sin embargo se debe modificar el XML como se muestra a continuación:

<?xml version="1.0" encoding="utf-8"?>

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 134134

<Button android:id="@+id/btnBuscar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Buscar" android:layout_below="@+id/skbBarraBusqueda" android:layout_alignStart="@+id/edtBuscar" /> <EditText android:id="@+id/edtBuscar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:ems="10" android:inputType="text" > <requestFocus /> </EditText> <SeekBar android:id="@+id/skbBarraBusqueda" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/edtBuscar" android:layout_marginTop="14dp" /> </RelativeLayout>

El diseño queda como se muestra: El diseño queda como se muestra:

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 33 55

Creación de la

Creación de la Primera Clase FragmentoPrimera Clase Fragmento

Además de un diseño de interfaz de usuario, un fragmento también tiene que tener una clase asociada con él para hacer el trabajo real por medio de código. Por ello se debe adicionar una nueva clase ir a los archivos de proyecto desplegado en la carpeta java Añadir una clase para este fin al proyecto desplegando la aplicación carpeta java bajo el proyecto FragmentExample en la ventana de herramientas del proyecto y hacer clic derecho sobre el nombre del paquete dado al proyecto cuando se creó (en este caso com.appmovil. fragmentexample). En el menú que aparece, seleccione la nueva opción -> Java Class. En el cuadro de diálogo Crear nueva clase resultando, nombre el ToolbarFragment clase y haga clic en Aceptar para crear la nueva clase.

Una vez que la clase se ha creado, se debe, por defecto, aparecerá en el panel de edición en el que se lea como sigue:

package com.appmovil.fragmentexample; public class ToolbarFragment {

}

Posteriormente se debe agregar las importaciones necesarias para que el buen funcionamiento de la aplicación

Por el momento, los únicos cambios en esta clase son para añadir algunas directivas de importación y reemplazar el método onCreateView () para asegurarse de que el archivo de diseño se infla y se visualiza cuando se utiliza el fragmento dentro de una actividad. La declaración de la clase también debe indicar que la clase amplía la clase Fragmento Android: package com.appmovil.fragmentexample; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup;

public class ToolbarFragment extends Fragment { @Override

public view onCreateView (LayoutInflater inflado, Contenedor ViewGroup, Bulto

savedInstanceState) { // Inflar el diseño de este fragmento

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 136136

vista regresar; }

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 33 77

Servicios basados en localización Servicios basados en localización Localización Geográfica Básica Localización Geográfica Básica

La geolocalización es la localización geográfica en Android existen multitud de formas de obtener la localización de un dispositivo móvil, la más conocida y popular es la localización por GPS, también es posible obtener la posición de un dispositivo por las antenas de telefonía móvil o mediante puntos de acceso Wi-Fi cercanos, y todos cada uno de estos mecanismos tiene una precisión, velocidad y consumo de recursos distinto.

A location-based service (LBS) A location-based service (LBS)

Es un sistema de difusión de información que se puede acceder por los dispositivos móviles a través de la red móvil. Es impulsado por la capacidad del sistema para detectar la posición geográfica del dispositivo móvil.

Código de ejemplo: Listar todos los proveedores. Código de ejemplo: Listar todos los proveedores.

LocationManager locManager =

(LocationManager)getSystemService(LOCATION_SERVICE); List<String> listaProviders = locManager.getAllProviders(); Clases para localización por GPS

Clases para localización por GPS Address

Address

 Una clase que representa una dirección, es decir, un conjunto de cadenas que describen una ubicación.

Criteria Criteria

Una clase con indicación de los criterios de aplicación para la selección de unproveedor de ubicación. Geocoder

Geocoder

 Una clase para el manejo de la geo codificación. GpsSatellite

GpsSatellite

 Esta clase representa el estado actual de un satélite GPS. GpsStatus

GpsStatus

 Esta clase representa el estado actual del motor GPS. Location

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 138138

 Una clase representa una situación geográfica sintió en un momento determinado (un "arreglar").

LocationManager LocationManager

 Esta clase proporciona acceso a los servicios de localización del sistema. LocationProvider

LocationProvider

 Unos proveedores de localización super cclase abstracto. GpsStatus.Listener

GpsStatus.Listener

 Se utiliza para recibir notificaciones cuando el estado del GPS ha cambiado. GpsStatus.NmeaListener

GpsStatus.NmeaListener

 Se utiliza para recibir sentencias NMEA del GPS. LocationListener

LocationListener

 Se utiliza para recibir notificaciones de la LocationManager cuando la ubicación ha cambiado.

Para más detalles visitar el portal de desarrollador google: http://developer.android.com/guide/topics/location/strategies.html

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 33 99

Google Maps Google Maps

Google Maps es un servidor de aplicaciones de mapas en la web que pertenece a Google. Ofrece imágenes de mapas desplazables, así como fotografías por satélite del mundo e incluso la ruta entre diferentes ubicaciones o imágenes a pie de calle Google Street View. Desde el 6 de octubre de 2005, Google Maps es parte de Google Local. Existe una variante a nivel entorno de escritorio llamada Google Earth que ofrece Google también de forma gratuita. En 2014, los documentos filtrados por Edward Snowden revelaron que Google Maps es parte y víctima del entramado de vigilancia mundial operado por varias agencias de inteligencia occidentales y empresas tecnológicas.

Imagen 215

Fuente: http://www.elandroidelibre.com/wp-content/uploads/2011/05/google-maps-navigation.jpg

Nuevo Google Maps Nuevo Google Maps

En la Google I/O 2013, Google presentó un rediseño de Google Maps para la versión Web, mostrando nuevas funciones como:

 El mapa ocupa toda la pantalla.

 La barra de búsqueda está en la parte superior izquierda y puede mostrar

información sobre la ubicación.

 En la esquina inferior derecha están ubicados los controles de zoom.

 Ahora hay un modo tierra el cual es una combinación entre la vista satélite y

google earth, en donde podremos ver las ciudades en 3D y al alejar la imagen podremos ver la Tierra en 3D.

 Al hacer clic en un lugar, nos muestra las reseñas, fotos, números de teléfono y

ver el edificio en Street View.

 Al usar indicaciones podremos ver varias rutas y cambiarlas, además de que se

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 140140

Habilitar APIS de google Maps Habilitar APIS de google Maps

Google está compuesto por muchas aplicaciones las cuales las denomina google apps, Google Apps for Work es un servicio

de Google que proporciona varios productos de Google con un nombre de dominio personalizado por el cliente. Cuenta con varias aplicaciones web con funciones similares a las suites ofimáticas tradicionales, incluyendo Gmail, Hangouts, Calendar, Drive, Docs, Sheets, Slides, Groups, News, Play, Sites y Vault. Fue la creación de Rajen Sheth, un empleado de Google que posteriormente desarrolló las Chromebooks.1

Para habilitar las apps de google Maps se debe ingresar a la siguiente dirección: 1. Ingresar a tu cuenta de Gmail

2. Ingresar a la consola de APIS

 https://code.google.com/apis/console

3. Crear un proyecto asociado a la plataforma de desarrollo para nuestro caso es una aplicación móvil en Android

4. Habilitar las API necesarias

Instalar google play services Instalar google play services

Para utilizar google Maps se debe instalar google play services ingresando al administrador de librerías como se muestra.

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 44 11

Creando nuestra primera aplicación en google Creando nuestra primera aplicación en google MapsMaps Datos del proyecto

Se debe modificar el XMl como se muestra en la siguiente imagen

Modificar el glandle como se muestra para agregar las referencias a google play services

Posterior a ello se debe crear las llaves digitales para firmar la aplicación con los siguientes comandos como se indica:

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 142142

Configurar el archivo de manifiesto como se indica

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyB9oARLFPe4wRGyeuWJq0IqZ0g84TjmjVI" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <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" />

Agregar el siguiente código para hacer uso de google Maps

import com.google.android.gms.maps.*; public class MainActivity extends Activity { private void createMapView(){

try { if(null == googleMap){ googleMap = ((MapFragment) getFragmentManager().findFragmentById( R.id.mapView)).getMap(); if(null == googleMap) { Toast.makeText(getApplicationContext(),

"Error creating map",Toast.LENGTH_SHORT).show(); }

}

} catch (NullPointerException exception){ Log.e("mapasApp", exception.toString()); }

}

Para agregar marcadores se debe realizar con el siguiente código import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions; Agregar el siguiente método para fijar un marcador

private void addMarker(){

if(null != googleMap){googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker") .draggable(true) ); } }

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 44 33

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main); createMapView();

addMarker(); }

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 144144

Servicios

Servicios

L

LOGRO DE LA UNIDAD DE APRENDIZAJEOGRO DE LA UNIDAD DE APRENDIZAJE

Al término de la unidad, el alumno elabora aplicaciones desatendidas basadas en servicios que permitan realizar operaciones como descarga de archivos grandes, monitorear usuarios basado en geolocalización.

T TEMARIOEMARIO

6.1 Tema 13: Creando y administrando Servicios (4 6.1 Tema 13: Creando y administrando Servicios (4 horas)horas)

6.1.1 Qué es un servicio,

6.1.2 Anatomía de un servicio, accesos y permisos. 6.1.3 Intent Service, Bound Service.

6.1.4 Configurar el archivo de manifiesto. 6.1.5 Iniciar/Configurar servicios

UNIDAD UNIDAD

6

6

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 44 55

Que es un

Que es un servicio (Service)servicio (Service)

Los servicios son componentes sin interfaz gráfica que se ejecutan en segundo plano. En concepto, son exactamente iguales a los servicios presentes en cualquier otro sistema operativo como por ejemplo Windows los servicios de Windows update, o el servicio de actualización de la hora de windows. Los servicios pueden realizar cualquier tipo de acciones, por ejemplo actualizar datos, lanzar notificaciones, o incluso mostrar elementos visuales como por ejemplo Activities si se necesita en algún momento la interacción con del usuario. La plataforma de Android tiene una gran variedad de servicios que ofrece como por ejemplo los alertas cuando la batería esta baja o por ejemplo cuando llega un mensaje de texto o alertas para acceder a dichos servicios se puede realizar con la claseManager . De esta manera, en nuestras actividades podremos accesar a estos servicios a través del métodogetSystemService().

Por otro lado, si necesitamos utilizar servicios propios, estos deben ir declarados en el archivo AndroidManifest.xml .

Imagen: Ciclo de vida de los servicios

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 146146

Creando un servicio de Creando un servicio de músicamúsica

1. Crea un nuevo proyecto con los siguientes datos:

2. Reemplaza el código dellayout activity_main.xml por:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"

android:text="Servicio de reproducción de música"/> <Button android:id="@+id/boton_arrancar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Arrancar servicio"/> <Button android:id="@+id/boton_detener" android:layout_width="wrap_content"

DESARROLLO

DESARROLLO DE DE APLICACIONES APLICACIONES MÓVILES MÓVILES I I 11 44 77

android:layout_height="wrap_content" android:text="Detener servicio"/> </LinearLayout>

El diseño de pantalla queda Como se muestra:

3.. Agregar la clase ServicioMusica