Post on 11-Nov-2021
PRODETUR
DISEÑO DE APLICACIONES MÓVILES PARA PYMES
Osuna, 17 de octubre de 2017
formacion@prodetur.es Telf.: 954 486 800
PRODETUR
+01 OBJETIVOS
+02 PROGRAMACIÓN DIDÁCTICA
+03 MÓD. 01 DESARROLLO ANDROID
+04 EVALUACIÓN CALIDAD FRANCISCO LÓPEZ
PRODETUR
Acercar al alumnado al mundo de desarrollo Android
Conocer los aspectos básicos que serán necesarios a la
hora de enfrentar un desarrollo Android como son:
• Estética, representación de información y diseño
de GUIS
• Persistencia
• Acceso a servicios remotos
OBJETIVOS
PRODETUR
Contenidos
PROGRAMACIÓN DIDÁCTICA
MÓD. 1 DESARROLLO ANDROID
• Arquitectura de aplicaciones• Seguridad básica• Interfaz gráfica de usuario• Menús• Persistencia y Base de datos• Uso de la cámara• Servicios en segundo plano• Acceso a servicios remotos• Depuración de aplicaciones
PRODETUR
Android es un sistema operativo para móviles de código abierto basado en Linux.
Existe una gran variedad de dispositivos que utilizan dicho SO con todas sus
particularidades y componentes propios. Los componentes básicos de su
arquitectura están dividas por capas.
1. Arquitectura de aplicaciones
PRODETUR
1. Arquitectura de aplicaciones
La base de Android es el Kernel de Linux,
permitiendo a los fabricantes de dispositivos
desarrollar controladores de hardware para un
kernel muy conocido.
Kernel de Linux
Proporciona interfaces estándares que exponen
las capacidades de hardware del dispositivo
al framework de la API de Java de más alto nivel.
Capa de abstracción de hardware (HAL)
La capa que se sitúa justo sobre el kernel la
componen las bibliotecas nativas de Android. Estas
bibliotecas están escritas en C o C++ y compiladas
para la arquitectura hardware específica del
teléfono. Ejemplos: SSL, OpenGL, SQLite, etc.
Bibliotecas C/C++ nativas
PRODETUR
1. Arquitectura de aplicaciones
No se considera una capa en sí misma, dado que también está formada por bibliotecas. Incluye la
mayoría de las funcionalidades de las bibliotecas habituales de Java así como otras específicas de
Android.
La mayoría de los componentes de esta capa son bibliotecas Java que acceden a los recursos a través
de la máquina virtual. Entre las más importantes se encuentran las siguientes: Content Providers, Activity
Manager, Package Manager, Location Manager, etc
Tiempo de ejecución de Android
Framework de la API de Java
La capa superior de esta pila de software la forman, como no podría ser de otra forma, las aplicaciones.
En este saco se incluyen todas las aplicaciones del dispositivo, tanto las que tienen interfaz de usuario
como las que no, tanto las nativas (programadas en C o C++) como las administradas (programadas en
Java), tanto las que vienen de serie con el dispositivo como las instaladas por el usuario. Aquí está
también la aplicación principal del sistema: Inicio (Home), también llamada a veces launcher.
Apps del sistema
PRODETUR
Principales bibliotecas de Android
1. Arquitectura de aplicaciones
• Android.view
Proporciona las principales clases parar crear las interfaces gráficas y capturar las
interacciones con la misma.
• Android.app
Contiene clases de alto nivel que encapsulan el modelo general de aplicación de Android.
Clases importantes: Activity y Service.
• Android.util
Contiene útiles para formateadores de fecha, texto, parseadores, etc.
• Android.database
Gracias a ella podemos tener interacciones a bajo nivel con las base de datos y los
Cursores.
• Android.content
Proporciona clases para el manejo de acceso de datos, principalmente usadas con recursos,
proveedores de contenido y paquetes. Parte de esta biblioteca es la clase Context.
• Otras
Android.webkit, android.media, android.provider, android.telephony, etc.
PRODETUR
Componentes de una App
• Activities
Representan el componente principal de la interfaz gráfica de una aplicación. Se puede
pensar en una actividad como el elemento análogo a una ventana o pantalla en cualquier
otro lenguaje visual.
• Services
Son componentes sin interfaz gráfica que se ejecutan en segundo plano. Pueden realizar
cualquier tipo de acciones, por ejemplo actualizar datos, lanzar notificaciones, etc.
• Content Providers
Es el mecanismo para compartir datos entre aplicaciones. Mediante estos componentes es
posible compartir determinados datos de nuestra aplicación sin mostrar detalles sobre su
almacenamiento interno, su estructura, o su implementación. De la misma forma, nuestra
aplicación podrá acceder a los datos de otra.
• Broadcast Receivers
Componente destinado a detectar y reaccionar ante determinados mensajes o eventos
globales generados por el sistema (por ejemplo: “Batería baja”, “SMS recibido”, “Tarjeta SD
insertada”, …) o por otras aplicaciones.
1. Arquitectura de aplicaciones
PRODETUR
Componentes de una App
1. Arquitectura de aplicaciones
• Views
Componentes básicos con los que se construye la interfaz gráfica de la aplicación.
De inicio, tenemos una gran cantidad de controles básicos, como cuadros de
texto, botones, listas desplegables, imágenes, etc. Existe la posibilidad de
extender la funcionalidad de estos controles básicos o crear nuestros propios
controles personalizados.
• Intents
Elemento básico de comunicación entre los distintos componentes que hemos
descrito anteriormente. Se pueden entender como los mensajes o peticiones que
son enviados entre los distintos componentes de una aplicación o entre distintas
aplicaciones. Mediante un intent se puede mostrar una actividad desde cualquier
otra, iniciar un servicio, enviar un mensaje broadcast, iniciar otra aplicación, etc.
• Notifications
Pueden ser usados para alertar a los usuarios sin tener una pantalla en concreto.
PRODETUR
1. Arquitectura de aplicaciones
Porcentaje de dispositivos por versiones (Hasta 02/10/2017)
Sin soporte
PRODETUR
1. Arquitectura de aplicaciones
Elementos importante en el archivo build.gradle
• buildToolsVersion Indica la versión del SDK de Android que vamos a usar.
• signingConfigs Configura las distintas firmas que podemos tener.
• productFlavors Indica las variantes que pueden existir de nuestra app.
• defaultConfig Contiene las configuraciones por defecto que se tomarán si no han sido
establecidas en los flavors.
• applicationId Identificador de la app, toda aplicación tiene un ID único que será el que
se utilice para subir a Google Play. Ej: es.prodetur.ejemploid
• minSdkVersion Versión mínima que soportaremos. Se debe establecer el valor de la
API. Si ponemos 21, indicará que sólo los dispositivos con API 21 (Lollipop) en adelante
serán soportados.
• versionCode Código de la versión. Siempre es un número y tiene que ser
incrementado para cada versión que generemos para subir a Google Play.
• versionName Nombre de la versión, al tener tipo String podemos poner el nombre que
queramos. Ej: “1.0.2”
• buildTypes Son los tipos de compilación que tendremos, en él podemos definir la
posibilidad de incluir proguard, tipo de firmado, etc.
PRODETUR
1. Arquitectura de aplicaciones
Flavors
Se definen en el archivo build.gradle bajo la etiqueta productFlavors. Sirven para
definir las variantes que puede tener nuestra app. Por ejemplo:
Si tenemos una app que tenga la versión demo y la versión completa podemos
definirla tal que así:
PRODETUR
1. Arquitectura de aplicaciones
Recursos por flavors
Se pueden definir distintos recursos / clases por cada flavor. Útil para cambiar
iconos, literales, nombre de la app, etc.
PRODETUR
1. Arquitectura de aplicaciones
Firma
Se define en el archivo build.gradle bajo la etiqueta signingConfigs. Se pueden
configurar tantas firmas como queramos, las cuales luego usaremos en la etiqueta
buildTypes. Un ejemplo de firma sería:
PRODETUR
1. Arquitectura de aplicaciones
Estructura de un proyecto
• Manifest
Tendrá en su interior la clase AndroidManifest, la cuál tiene
todas las definiciones de permisos, activities, configuraciones,
servicios, etc.
• Java
Contiene todas las clases de java que necesitamos en el
proyecto.
• Res
Carpeta donde irán todos los recursos de la aplicación, siempre
estarán agrupados por subcarpetas.
• Res/drawable
Contiene todos los recursos gráficos (iconos, backgrounds
definidos por XML, etc). Se dividirá en las carpetas:
Drawable, drawable-ldpi, drawable-mdpi, drawable-hdpi,
drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi, drawable-
nodpi
PRODETUR
1. Arquitectura de aplicaciones
Estructura de un proyecto
• Res/layout
En ella se encuentran todos los layouts que dan forma a la app.
• Res/Menu
Encontramos todos los menús definidos, ya sean de tipo
contextual, lateral u opciones en la toolbar.
• Res/Mipmap
Generalmente sólo encontraremos el icono de la aplicación
• Res/Values
Aquí estarán todos los recursos no gráficos. Están agrupados
entre otros por:
• Colors Definición de los colores
• Strings Definición de los literales para su
internacionalización (I18N).
• Styles Estilos de las vistas
• Dimens Dimensiones comunes
PRODETUR
1. Arquitectura de aplicaciones
Estructura de un proyecto
• Res/anim o animator
Tendrá todas las animaciones definidas por XML
• Res/Raw
Contiene recursos adicionales, normalmente en formato distinto
a XML, que no se incluyan en el resto de carpetas de recursos.
• Gradle Scripts
Encontraremos tantos archivos build.gradle como módulos
tenga nuestro proyecto más el común. En este caso tenemos:
• Del proyecto Contiene configuraciones para todos
los módulos.
• Del módulo app Tiene todas las configuraciones que
hemos mencionado anteriormente
• Proguard-rules.pro
En él estarán todas las configuraciones para aplicar proguard
en nuestro proyecto siempre y cuando esté habilitado.
PRODETUR
1. Arquitectura de aplicaciones
Entorno de desarrollo (IDE) y Gradle
Android Studio Aplicación Gradle
PRODETUR
2. Seguridad básica
Permisos
SSL
Criptografía
Proguard
Almacenamiento
seguro de datos
WebViews y
JavaScript
Permisos
SSL
Proguard
PRODETUR
2. Seguridad básica
• Permisos
Antes de incluir un permiso en la app debemos pensar si es realmente necesario, un exceso
de permisos puede plantear al usuario la instalación de la aplicación.
No se deben definir permisos especiales y se recomienda utilizar sólo los existentes por el
SO.
Existen 4 niveles de protección:
• Normal
• Dangerous
• Signature
• signatureOrSystem
• Criptografía
Usar un generador de claves aleatorias y el KeyStore para almacenarlas de forma segura.
• Almacenamiento de datos seguro
Tipos:
• Interno Sólo lo puede usar nuestra app
• Externo Editable a nivel global
PRODETUR
2. Seguridad básica
• Certificados SSL
Uno de los requisitos indispensables para que la comunicación Servidor App
sea segura y resistente a ataques.
• Carga dinámica de código
Se desaconseja por completo este uso, es uno de los mayores problemas de
seguridad en una aplicación.
• WebViews y JavaScript
Si nuestra aplicación usa este componente debemos tener cuidado con el la
posibilidad de cargar código JavaScript malicioso en nuestra app.
• Proguard
Se trata de la ofuscación de código, es decir, volver el código ilegible y sin la
posibilidad de realizar una traza.
Se configura en los buildTypes de la siguiente forma:
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Layouts
los layouts son elementos no visuales destinados a controlar la distribución,
posición y dimensiones de los controles que se insertan en su interior.
Tipos (Ordenados porcomplejidad):
• FrameLayout. Coloca todos sus controles hijos alineados con su esquina
superior izquierda. Es necesario establecerles la propiedad gravity para
colocarlos según nos interese.
• LinearLayout. Apila uno tras otro todos sus elementos hijos en
sentido horizontal o vertical según se establezca en su
propiedad android:orientation.
• RelativeLayout. Permite especificar la posición de cada elemento de forma
relativa a su elemento padre o a cualquier otro elemento incluido en el
propio layout.
• ConstraintLayout.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)Densidades de pantalla
Cantidad de píxeles dentro de un área física de la pantalla, a la que en general se hace
referencia como “dpi” (puntos por pulgada).
• Existen 6 grupos
Density LDPI MDPI HDPI XHDPI XXHDPI XXXHDPI
DPI 120 160 240 320 480 640
• Porcentaje de uso (hasta 02/20/2017)
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Controles básicos
FAB
CheckBox
Button
RadioButton
Switch
EditTex
t
ImageVie
w
Eventos (Listeners)
Click, LongClick, FocusChange, TextChange, Swipe, Touch, etc.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Práctica 1, nuestra primera aplicación en Android.
Crearemos una aplicación en la que introduciremos un texto en un campo de
edición que, al pulsar un botón, mostraremos un mensaje por pantalla (Toast)
con dicho texto.
Además dicha pantalla tendrá un botón flotante en la parte inferior que, al pulsar
en él, navegaremos hacia otra pantalla con una imagen estática.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Fragments
Podría definirse como una porción de la interfaz de usuario que puede añadirse o
eliminarse de la interfaz de forma independiente al resto de elementos de la
actividad, y que por supuesto puede reutilizarse en otras actividades.
• Uso
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
RecyclerViews, barra de título y elementos de lista
Actionbar
/ Appbar /
Toolbar
CardView
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
• Añadimos las dependencias necesarias
• Añadimos el RecyclerView al layout de nuestra activity
Este elemento necesita:
• Adapter, se trata del contenedor que tendrá todos los objetos que se pintarán en el
listado.
• ViewHolder, es la vista donde se representará nuestro objeto. Necesita un layout para
ello. En nuestro ejemplo, tendrá un CardView y un TextView dentro de él.
• LayoutManager, indicará cómo se debe de pintar los elementos. Destacamos el
LinerLayoutManager y GridLayoutManager.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
• Añadimos el CardView a nuestro elemento de lista (ViewHolder)
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
• Adapter
Tiene que extender de RecyclerView.Adapter y tiene 4 métodos principales. Tres
de ellos necesitan que se implementen:
• onCreateViewHolder, crea el ViewHolder que usaremos para el pintado de
nuestro elemento.
• onBindViewHolder, es el encargado de establecer los valores del objeto en los
distintos campos del ViewHolder.
• getItemCount, tiene que devolver el tamaño total de los elementos.
Además, tenemos el método notifyDatasetChange() que forzará que todos los
elementos vuelvan a repintarse (onBindViewHolder) después de una
actualización de los mismos.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
• Práctica 2, app con listas.
Crearemos una aplicación en la que mostraremos una lista de objetos “Persona”
que tendrá un nombre, apellido y DNI. Al hacer click en un elemento de la lista
mostraremos un mensaje con el texto siguiente: [“Nombre y apellido: ” +
nombre_del_alumno + apellido_del_alumno].
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Material Design
Es una guía integral para el diseño visual, de movimientos y de interacción en distintas
plataformas y dispositivos.
Esencia:
• Diseño
• Animaciones
• Temas y estilos
• Experiencia de usuario (UX)
¿Por qué hacer dos clicks para algo que se puede hacer con uno?
• Nunca las sombras fueron tan importantes
Material design aporta además del os ejes X e Y, el eje Z dando profundidad a las vistas.
PRODETUR
3. Interfaz Gráfica de Usuario (UI)
Animaciones
• CircularReveal
Se trata de una animación muy visual que tiene por
objetivo hacer visible vistas de un modo distinto al
típico fadeIn / fadeOut.
• Animaciones de iconos o vectoriales
Los iconos que tienen la extensión “svg” tienen la
peculiaridad que podemos animar sus coordenadas
con el fin de crear nuevos iconos a partir de ellos.
PRODETUR
4. Menús
Contextual
1. Crear el menú
Definiremos un xml en la carpeta “menu” que tendrá
todas las opciones.
2. Asignar el menú a una vista
Definiremos un xml que tendrá todas las opciones.
3. Mostrar el menú
PRODETUR
4. Menús
Opciones en la Toolbar
android:showAsAction, indica si la opción de menú se mostrará como botón de
acción o como parte del menú de overflow. Valores:
• ifRoom. Se mostrará como botón de acción sólo si hay espacio disponible.
• withText. Se mostrará el texto de la opción junto al icono en el caso de que
éste se esté mostrando como botón de acción.
• never. La opción siempre se mostrará como parte del menú de overflow.
• always. La opción siempre se mostrará como botón de acción. Este valor
puede provocar que los elementos se solapen si no hay espacio suficiente
para ellos.
2. Asignar el menú a la toolbar en nuestra activity
PRODETUR
4. Menús
¡Importante!
Menú Contextual Opción en la Toolbar
onCreateContextMenu
onContextItemSelected
onCreateOptionsMenu
onOptionsItemSelected
PRODETUR
4. Menús
Menú lateral (NavigationView y DrawerLayout)
1. Crear layoutEstablece un margen para que
no se solape con la StatusBar
Desde dónde se abrirá el
menú lateral
Layout donde irá nuestra
Activity
Vista del menú lateral,
definiendo su header y
menú si lo necesitasen.
PRODETUR
4. MenúsMenú lateral (NavigationView y DrawerLayout)
2. Definición de la Toolbar para asociarle nuestro DrawerLayout
3. Configuración de los componentes
PRODETUR
4. Menús
• Práctica 3, app con distintos menús.
En este caso haremos una app que tenga los tres tipos de menús explicados,
para ello, tendremos una sola pantalla con un listado de elementos “País”. Estos
elementos tendrán un nombre y un campo capital. Tipos de menú:
• Tendremos un menú contextual que saldrá cuando hagamos un long click
sobre un elemento de nuestra lista.
• Un menú lateral que simplemente tendrá texto estático y al pulsar sobre
un elemento de él, mostraremos un Toast.
• Una opción en la toolbar que al hacer click en él, compartiremos nuestra
app por redes sociales.
PRODETUR
5. Persistencia y Base de Datos
El almacenamiento de datos es muy importante para reducir el posible consumo
excesivo de red, salvado y restauración de preferencias y tratamiento de datos
maestros de las aplicaciones.
Clases a tener en cuenta
• SQLiteOpenHelper
• SQLiteDatabase
• Cursor
PRODETUR
5. Persistencia y Base de Datos
SQLiteOpenHelper
Tiene dos métodos abstractos, ambos tienen entre sus parámetros el objeto
SQLiteDatabase que se trata de la BD en la cuál se va a trabajar.
• onCreate(). Como su nombre indica, será donde se incluya las sentencias SQL
que darán lugar a la creación de la BD. (“CREATE TABLE Coches…”).
• onUpgrade(). En ese caso, tenemos algo más complejo. Actualizaciones de
nuestra estructura y migración de los datos si es necesario. Además, recibe
dos enteros, el número de la versión anterior y la nueva. Por si fuese necesario
aplicar más secuencias de actualizaciones.
PRODETUR
5. Persistencia y Base de Datos
SQLiteDatabase
Expone métodos para el control de la BD y la posibilidad de ejecutar sentencias
SQL.
Para ejecutar sentencias es muy importante saber que tenemos que seguir un
orden:
1. Abrir la BD (en modo escritura o lectura, según necesitemos) llamando al
método getWritableDatabase() o getReadableDatabase().
2. Ejecutar nuestras sentencias haciendo uso del método execSQL(String
sentenciaSQL).
3. Cerrar la BD llamando al método close().
PRODETUR
5. Persistencia y Base de Datos
Cursor
Expone los resultados de una consulta SQL. Los métodos más comunes son:
• getColumnNames(), que retorna un array de Strings con los nombres de las
columnas.
• getCount(), retorna el tamaño del array de elementos devueltos por la consulta.
• close(), cierra el cursor e invalida todos los recursos que se han necesitado.
• getColumnIndex(String columnName), retorna el índice de la columna pasada
por parámetro.
• moveToFirst(), nos sirve para saber si existe al menos un registro.
• moveToNext(), si retorna true, indica que existe un nuevo recurso y
accederemos a los datos del mismo en esa iteración.
PRODETUR
5. Persistencia y Base de Datos
Práctica 4, base de datos.
Esta app simplemente tendrá un formulario con los campos de nombre, apellidos
y edad. En este caso guardaremos un objeto Persona que debe tener las
propiedades anteriormente comentados más una llamada “id” de tipo int. En la
pantalla tendremos un botón de guardar, que al hacer click, guardará el objeto en
la base de datos.
Además, tendremos una opción en la toolbar que nos llevará a un listado para
ver todos los objetos que tenemos guardados en nuestra BD.
PRODETUR
5. Persistencia y Base de Datos (¡Extra!)
Usos de ORM y herramientas para gestión de base de datos.
Facilidad
Rapidez
Mismo
rendimiento
PRODETUR
6. Uso de la cámara
¿Cómo empezamos?
Permiso de la
cámara
Hardware
obligatorio
¿Necesitamos
almacenamiento?
¿Necesitamos grabar
audio?
¿Y localización?
PRODETUR
6. Uso de la cámara – Casos básicos
Tomar una foto
Simplemente llamamos a un Intent con un código para capturar cuando se haga
la foto ya que nos retornará por otro método.
Obtener un thumbnail de la imagen capturada
Obtenemos la foto capturada pero con menor resolución.
PRODETUR
6. Uso de la cámara
android.hardware.camera2 (android.hardware.camera está deprecada) >=
API 21• CameraManager
Obtiene todas las características de la cámara y la puede lanzar con el método
openCamera(…).
• CameraCaptureSession
Es necesario definir una sesión para capturar imágenes.
• Surface
Necesitamos este elemento para dar salida a lo que se está mostrando por la cámara.
• CaptureRequest
Define los parámetros para la captura de imágenes. Una vez definida podemos tomar una
imagen o una secuencia de ellas.
• TotalCaptureResult
Contiene la configuración final del hardware de la cámara, tiempo de captura, etc.
• Definición del uso de esta API
PRODETUR
6. Uso de la cámara
• Práctica 5, captura de imagen.
Tenemos una sola pantalla con dos botones.
El primero, abrirá una activity con un solo botón y un ImageView. Al hacer click
en dicho botón, abriremos la cámara de forma nativa y al hacer una foto
mostraremos la imagen en pantalla.
PRODETUR
6. Uso de la cámara, solución a OOM
Para acabar con la aparición de estos errores necesitamos reducir el tamaño de
las imágenes que pintaremos en pantalla. Además, antes de cargar la imagen en
memoria es importante que accedamos a su tamaño y redimensionemos la
imagen.
En Android Developer, dedicaron un artículo para la carga eficiente de imágenes
de gran tamaño.
https://developer.android.com/topic/performance/graphics/load-bitmap.html
PRODETUR
7. Servicios en segundo plano
• UI Thread vs Background Thread
• ¿Para qué los
necesito?
Application Not
Responding (ANR)
• ¿Solucione
s?Thread, AsyncTask e
IntentService
PRODETUR
7. Servicios en segundo plano
Thread No podemos actualizar
elementos de interfaz
• Métodos post y runOnUiThread
Ambos necesitan un nuevo runnable ya que serán lanzados en hilo principal.
• ¿Problemas? Sí, código ilegible
PRODETUR
7. Servicios en segundo plano
AsyncTask – Métodos
• onPreExecute(). Se ejecutará antes del código principal de nuestra tarea. Se
suele utilizar para preparar la ejecución de la tarea, inicializar la interfaz, etc.
• doInBackground(). Contendrá el código principal de nuestra tarea.
• onProgressUpdate(). Se ejecutará cada vez que llamemos al
método publishProgress() desde el método doInBackground().
• onPostExecute(). Se ejecutará cuando finalice nuestra tarea, o dicho de otra
forma, tras la finalización del método doInBackground().
• onCancelled(). Se ejecutará cuando se cancele la ejecución de la tarea antes
de su finalización normal.
PRODETUR
7. Servicios en segundo plano
AsyncTask – Tipos
1. El tipo de datos que recibiremos como entrada de la tarea en el
método doInBackground().
2. El tipo de datos con el que actualizaremos el progreso de la tarea, y que
recibiremos como parámetro del método onProgressUpdate() y que a su vez
tendremos que incluir como parámetro del método publishProgress().
3. El tipo de datos que devolveremos como resultado de nuestra tarea, que
será el tipo de retorno del método doInBackground() y el tipo del parámetro
recibido en el método onPostExecute().
PRODETUR
7. Servicios en segundo plano
IntentService
Se trata de un tipo particular de servicio que se preocupará por nosotros de la
creación y gestión del nuevo hilo de ejecución y de detenerse a sí mismo una
vez concluida su tarea asociada.
Implementación
Tendremos que extender nuestra clase de IntentService e implementar su
método onHandleIntent(). Este método recibe como parámetro un Intent, que
podremos utilizar para pasar al servicio los datos de entrada necesarios.
Inconveniente con respecto a los AsyncTask
No proporciona métodos en UI Thread por lo que la comunicación con el hilo
principal es algo más compleja. Para ello, se hará uso de los
BroadCastReceivers.
PRODETUR
7. Servicios en segundo plano
Práctica 6, tarea en segundo plano.
Haremos una tarea en segundo plano que calcula el factorial de un número
enviado por parámetro. En la pantalla tendremos dos botones:
• El primero, realizará la llamada usando un AsyncTask.
• El segundo, lo hará usando un Thread.
Ambos, pintarán en pantalla el valor devuelto por la tarea.
PRODETUR
8. Acceso a servicios remotos
Servicios tipo REST
Tipos de petición
• GET: Para consultar y leer recursos
• POST: Para crear recursos
• PUT: Para editar recursos
• DELETE: Para eliminar recursos.
• PATCH: Para editar partes concretas de un recurso.
Código de errores
• HTTP 200 Éxito
• /= HTTP 200 Fallos de validación, permisos, etc.
Headers más usados
• Content-Type. Define el tipo de la respuesta que se retornará y de los valores que serán
enviados al servicio. Generalmente usaremos application/json.
• Authorization. Usado para las autorizaciones en los servicios. (Basic Authorization)
PRODETUR
8. Acceso a servicios remotos
Comenzamos
1. Necesitamos el permiso de internet para poder realizar al llamada.
2. Definir cliente HTTP(HttpClient) que usaremos para establecer la
comunicación con el servidor.
3. Definición del tipo de llamada que haremos (HttpGet, HttpPost, etc)
incluyendo la url para realizar la llamada.
4. Incluimos los headers necesarios.
5. Si es necesario enviar datos (por ejemplo en un POST), debemos incluirlos
en el tipo de llamada creada.
6. Ejecutamos la llamada obteniendo un HttpResponse.
7. Evaluamos el objeto devuelto y lo tratamos según su código de error.
Parsearemos el objeto retornado.
8. Crearemos un AsyncTask para realizar la llamada.
9. Pintaremos los datos retornado por pantalla.
PRODETUR
Para la respuesta del servicio es necesario hacer uso del método toString de la
clase EntityUtils.
Después de esto, debemos convertir dicha respuesta en un JSONObject para
finalmente poder acceder a los campos correctamente.
8. Acceso a servicios remotos
Parser de respuestas
PRODETUR
8. Acceso a servicios remotos
• Práctica 7, llamada a servicio.
Implementaremos una llamada a servicio (GET) donde obtendremos una lista de
elementos que después de parsearlos, los mostraremos por pantalla. La app solo
tendrá una pantalla, donde al entrar en ella se realizará la llamada de forma
automática.
PRODETUR
8. Acceso a servicios remotos – Retrofit (¡Extra!)
Se trata de una biblioteca que proporciona una capa de abstracción para la
implementación de los servicios.
Ventajas
• Simpleza.
• No generar código redundante.
• Rapidez.
• Altamente configurable.
PRODETUR
En todo desarrollo, es necesario generar logs con el fin de seguir la traza de nuestras aplicaciones.
9. Depuración de aplicaciones
android.util.Log y hacer debug de nuestra app
Criticidad
• Error Log.e(…)
• Warning Log.w(…)
• Info Log.i(…)
• Debug Log.d(…)
• Verbose Log.v(…)
Parámetros
Es necesario pasarle dos parámetros al método de pintado de log:
• Tag, es la categoría asociada al log.
• Mensaje, que se mostrará en el log.