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