Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Desarrollo de
aplicaciones
móviles
Parte (a)
Contenido General del curso
Android SDK:
- Kit de desarrollo oficial y multiplataforma de Google.
- Kit de desarrollo oficial y multiplataforma de Google.
- Contiene herramientas como IDEs, depuradores y emuladores.
- Disponibles para Windows, GNU/Linux y Mac OSX.
- Requiere la JDK instalada.
- Contiene además herramientas para descargar y actualizar software.
Phonegap – Apache Cordova:
- Framework HTML5 multiplataforma.
- Permite desarrollar aplicaciones portables.
- Ofrece acceso al Hardware del teléfono mediante plugins.
- Permite incluso gestionar, emular y empaquetar la aplicación.¡.
- Creado por Adobe y mantenido por Apache Software Foundation.
JQuery Mobile:
- Framework HTML5 multiplataforma.
- Permite desarrollar aplicaciones portables.
- Ofrece acceso al Hardware del teléfono mediante plugins.
- Permite incluso gestionar, emular y empaquetar la aplicación.
- Creado por Adobe y mantenido por Apache Software Foundation.
¿Qué es Android?:
Arquitectura de Android:
Aplicaciones
- Todas las aplicaciones están desarrolladas en Java.
Framework de Aplicaciones
- Tenemos acceso completo a la API de desarrollo, usada por las aplicaciones base.
- Está pensado y diseñado para simplificar el uso y reutilización de componentes.
- Permite a una aplicación enviar mensajes y compartir información con otras.
- Permite que el desarrollador inclusive cree componentes o reutilice los existentes.
- Contiene herramientas para gestionar recursos, actividades, noticaciones y otras
características del Sistema Operativo.
Librerías
- Android incluye un conjunto de librerías escritas en C y C++ para trabajar con
componentes del sistema.
- Utiliza una librería en C al igual que Linux para dialogar con el núcleo.
- Contiene librerías SQLite para almacenar y trabajar con información.
- Contiene OpenGL, una potente librería para desarrollo en 2D y 3D.
- La librería Webkit nos permite visualizar y navegar páginas Web.
Android Runtime
- Se basa en el uso de una Máquina Virtual, DalvikVM creada por Dan Borenstein en
conjunto con ingenieros de Google.
- Esta máquina virtual ejecuta todas las aplicaciones no nativas de Android.
- A la hora de desarrollar nuestras aplicaciones (código fuente Java) son compiladas a
un formato que es luego interpretado en cualquier otra plataforma android (archivos
.dex) .
- El código binario de Dalvik no es compatible con el bytecoode de Java, sólo se utiliza
Java como lenguaje de programación.
- En Android KitKat 4.4, se cambia DalvikVM se reemplaza por ART Runtime para una
mejor performance y funcionamiento.
Kernel de Linux
- Android utiliza el mismo kernel de Linux para su simplicidad.
- La idea de ésta arquitectura es la de permitir abstraer al desarrollador del hardware y
de brindar seguridad.
- Justamente por ésto, el concepto de “rootear” un sistema Android consiste en tener
acceso como root o administrador.
- El Kernel se encarga de todas las tareas de gestión de memoria y recursos.
Algo de historia
Google en primera medida financia el desarrollo de Android Inc, a quien luego compra en
2005.
El 5 de noviembre de 2.007 se forma la Open Handset Alliance, con compañías como
Samsung, Broadcom, Motorola, Intel y LG (entre otros).
En un principio el desarrollo de Android se continuaba dentro del Kernel de Linux, pero
luego fue removido por motivos de licencias.
Versiones de Android
Activity – Definición
Activity – Comunicación
Activity – Ciclo de vida
Intent (Intento)
Para recuperar el objeto de recurso accedemos al método getIntent(), el cual nos devuelve
cual fue el intento que invocó a la actividad actual:
Intentos y criterios
Son los elementos base de una UI en Android, están formados por una parte en código
Java y una parte en formato XML.
Los elementos se estructuran en una jerarquía de árbol de elementos View.
La clase View es la clase padre de todo componente visual en Android y sirve para todo
Widget.
Las vistas adoptan diferentes formas y tamaños, y podemos modificar sus atributos en la
medida que lo necesitemos.
Permiten el manejo de eventos implementando listeners o métodos para ejecutar
acciones.
Android proporciona un amplio conjunto de objetos View en el paquete android.view.
Dentro de las vistas se agrupan los Grupos de Vistas – ViewGroup, la cual es una subclase
de View.
El objetivo de los ViewGroup es el de agrupar elementos de vistas para formar estructuras
de datos visuales complejas.
Toda subclase de View tiene acceso a sus métodos de clase base, que permiten realizar
operaciones gráficas con la UI.
El método findViewByid()
Son objetos que están “escuchando” o a la espera de que ocurra un evento en particular y
tienen acceso al componente que las invoca.
Entre los principales eventos tenemos el de presionar una tecla, hacer click, perder o
ganar el foco.
Para implementarlos debemos implementar una determinada interface.
Pueden especificarse utilizando clases anónimas.
Listeners – Ejemplo
Componentes de UI
Botones
- Representan el elemento de comunicación básica con el usuario.
- Podemos enlazas acciones utilizando un Listener o definiendo un método y
enlazándolo en nuestro archivo XML mediante el atributo onClick
TextViews
- Se utilizan para simbolizar etiquetas en una aplicación.
- Por defecto no pueden editarse ni modificarse, para eso utilizaremos EditText.
- El atributo textIsSelectable permite al usuario copiar el contenido de la etiqueta.
- Podemos obtener y establecer su contenido con los métodos getText() y setText().
EditText
- Es una subclase de EditText que puede ser editable.
- De acuerdo al tipo que definamos, cambia la presentación del teclado para utilizarse.
- Podemos establecer mensajes de validaciones utilizando el método setError().
- Podemos asociar Watchers en la medida que cambia su contenido para realizar
acciones.
- Para gestionar los cambios en el contenido deberemos utilizar una clase que
implemente la interface TextWatcher.
CheckBox
- Es un componente específico con dos estados (true o false).
- Podemos obtener su estado mediante el método isChecked().
- Podemos establecer su estado mediante el método setChecked().
Pickers
- Permiten seleccionar valores ya sea de hora o fecha.
- La API provee las clases TimePickerDialog y DatePickerDialog.
- Para implementarlas deberemos crear una subclase de DialogFragment.
- Para implementarlas deberemos crear una subclase de DialogFragment.
- Para invocarlos deberemos invocar a un objeto de dicho tipo.
DialogFragments
- Se utilizan para representar cuadros de dialogo con opciones.
- Podemos crear dialogos utilizando las clases Builder de Android.
- Otra opcion es crear una subclase de DialogFragment.
Toast
- Se utiliza para enviar mensajes de tipo notificación al usuario.
- Toma el aspecto nativo de la versión de Android que estemos utilizando.
- Nos permite especificar su duración y contenido.
- Lo invocamos con el método show().
ListView
- Es un componente de tipo ViewGroup utilizado para crear una lista de items.
- Para instertar datos en la lista se utiliza una clase ListAdapter.
- Posee una subclase llamada ExpandableListview que permite el agrupamiento de
items.
- Primeramente creamos un archivo XML aparte para el componente
- A continuación crearemos una subclase de ListActivity.
- Finalmente escribiremos un Listener para cuando se selecciona un elemento de la
lista.
Adaptadores
Son considerados una interface común al modelo de datos que existe por detrás de todos
las herramientas de selección.
Todas las herramientas de selección acceden a la información a través de un adaptador.
También son responsables de generar vistas específicas que se mostrarán dentro de la
herramienta de selección.
La API de Android proporciona algunos adaptadores base, aunque también podemos
desarrollar los nuestros en la medida que lo necesitemos.
GridViews
Layouts
Linear Layout
Apila los elementos que lo contienen en forma horizontal o vertical (dependiendo del
parámetro android:orientation).
Los elementos contenidos pueden establecer sus propiedades android:layout_width y
android:layout_heigth para determinar sus dimensiones dentro del Layout.
La propiedad android:layout_weight permite a los elementos definir tamaños
proporcionales para completar la UI.
Table layout
Permite distribuir sus elementos hijos en forma tabular, definiendo filas y columnas.
La estructura se define en formato similar al HTML, es decir en filas y columnas.
Para definir las filas utilizaremos objetos de tipo TableRow y dentro de los mismos
insertaremos los elementos de la fila necesarios.
El número total de columnas de cada fila será representado por la fila que más
componentes contenga.
Relative layout
Absolute layout
Es una capa donde se utilizan coordenadas X e Y para indicarle donde colocar elementos
dentro del contenedor.
En cada elemento definimos la posición que ocupará en la pantalla.
Para ésto utilizamos las propiedades android:layout_x y android:layout_y.
Este Layout se encuentra deprecado.
Frame layout
Menúes
Creamos el menú dinámicamente vía código Java en lugar de tomar como base un archivo
XML.
Permiten mostrar un menú luego de una pulsación larga sobre un objeto de tipo View.
Debemos asociar el componente como disponible para un menú contextual.
Luego definimos el menú de cualquiera de las dos formas anteriores (XML o Java).
Deberemos escribir código para el método oncreateContextMenu.
A la hora de seleccionar un elemento del menú sobreescribiremos el método
onContextItemSelected.
Almacenamiento de datos
Almacenamiento móvil
SQLite
Es una base de datos muy popular debido a que tiene un tamaño muy reducido y no
requiere de un servidor.
Tampoco necesita configurarse y ofrece soporte para transacciones.
Android incorpora todas las herramientas para la creación, uso y gestión de Bases de
Datos SQLite.
Para realizar sentencias que no devuelven resultados podemos utilizar tanto la opción del
metodo execSQL obtenido de una instancia.
Si bien estos métodos son fáciles de usar, de ésta forma no son muy parametrizables.
Otra forma de proceder es utilizar los métodos insert(), update() y delete() que posee la
clase ContentValues
También podemos parametrizar los métodos anteriores, para trabajar de una mejor forma
Para consultar información podemos utilizar el método rawQuery() el cual recibe una
sentencia SQL como parámetro y opcionalmente las condiciones.
O podemos utilizar el método query() en el cual especificaremos de otra forma la tabla, los
campos y el filtro de búsqueda a realizar.
- La clase Cursor posee métodos para recorrer el resultado de una consulta y procesar
sus resultados: boolean moveToFirst() ; boolean moveToLast() ; xxx getXXX(String) ;
xxx getXXX(int) ; String[] getColumnNames() ; int getColumnIndex(String) ; String ;
getColumnName(int) int getCount(int) ; boolean moveToNext() ; boolean ;
moveToPrevious() ; boolean moveToPosition(int) ; boolean move(int).
Métodos de Movimiento: las posiciones comienzan en 0:
- boolean moveToFirst(): Se coloca al inicio de la consulta.
- boolean moveToLast(): Se coloca al final de la consulta.
- boolean moveToNext(): Avanza un registro.
- boolean moveToPrevious():Se mueve vía posición relativa.
- boolean move(int): Retrocede un registro.
- boolean moveToPosition(int): Avanza a la posición N.
Métodos para obtener valores:
- String[] getColumnNames():Devuelve todos los nombres de las columnas.
- int getColumnIndex(String): Devuelve la posición de una columna.
- xxx getXXX(String): Obtiene el valor de una columna por nombre.
- xxx getXXX(int): Obtiene el valor de una columna por posición.
- int getCount(int): Devuelve la cantidad de registros resultante de la consulta.
- String getColumnName(int): Devuelve el nombre de la columna en la posición X.
Gestión de archivos
La API de Android permite trabajar con archivos en forma muy similar a Java.
Podemos leer y escribir archivos ubicados en:
- La memoria interna del dispositivo.
- Dispositivos de almacenamiento externo, si existen.
- La propia aplicación, en forma de recurso.
Trabajando en la memoria interna
Debemos tener en cuenta de que la tarjeta puede no estar presente o no ser reconocida.
Contamos con un método estático getExternalStorageStatus() de la clase Environment que
nos devuelve el estado, entre los cuales tenemos:
- MEDIA_MOUNTED: la memoria externa está disponible y lista para su uso.
- MEDIA_MOUNTED_READ_ONLY: la memoria está disponible en modo solo lectura.
- MEDIA_UNMOUNTED: no se encuentra accesible la tarjeta.
- MEDIA_REMOVED: se ha expulsado la tarjeta.