INTRODUCCIÓN A ANDROID Por Francisco J. Recio Portillo para http://www.tostring.es
Historia [0] Julio 2005 Google adquiere Android, Inc. Pequeña empresa que desarrolla software para móviles (hasta entonces una gran desconocida) Noviembre 2007 Nace la Open Handset Alliance Consorcio de empresas unidas con el objetivo de desarrollar estándares abiertos para móviles Texas Instruments, Broadcom co., Google, HTC, Intel, LG, Marvel Tech., Motorola, Nvidia, Qualcomm, Samsumg Electonics, Sprint Nextel, T-Mobile Se anuncia su primer producto, Android, plataforma para móviles construida sobre el kernel de Linux 2.6
Historia [1] Octubre 2008 Publicado el proyecto open source Android Distribuido principalmente con licencia Apache 2.0 Partes en otras licencias, p.e. GPL v2 para el núcleo Se abre el Android Market HTC Dream (G1), primer teléfono con Android Diciembre 2008 Nuevas incorporaciones ARM Holdings, Athreos Communications, Asustek Computer Inc., Garmin Ltd, Softbank, Sony Ericsson, Toshiba Corp y Vodafone Group Plc.
Historia [2] Noviembre 2009 Motorola Droid Consigue vender 1.05 millones de unidades en 74 días, superando el record establecido por el iphone de Apple Diciembre 2009 16.000 aplicaciones en el Market 60% gratuitas, 30% de pago aproximadamente Febrero 2010 Google anuncia la buena marcha de Android 60.000 teléfonos con Android vendidos al día
Características Características Framework de aplicación que habilita la reutilización y reemplazo de componentes Máquina virtual Dalvik optimizada para móviles Navegador integrado basado en WebKit Gráficos optimizados por una librería gráfica 2D propia; gráficos 3D basados en la especificación OpenGL ES 3.0 SQLite para almacenamiento de datos estructurados Multi-táctil soporte nativo para pantallas capacitivas Soporte para gran variedad de archivos multimedia (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) Telefonía GSM Bluetooth, EDGE, 4G y WiFi (4G, WiMAX,...) Cámara, GPS, compás, acelerómetro... Tethering: usar al dispositivo como punto de acceso inalámbrico Entorno de desarrollo completo incluyendo emulador, herramientas de depuración, profiling de memoria y rendimiento. IDE Android Studio y Eclipse
Arquitectura
Modelo de Aplicaciones [0] Aplicaciones Escritas en Java y empaquetadas en Android package (apk) Cada aplicación es independiente Se ejecuta en su propio proceso de Linux Cada proceso tiene su propia máquina virtual de Java Cada aplicación tiene asignado un ID de usuario de Linux Solo ese ID de usuario tiene permisos para acceder a los archivos de la aplicación Componentes básicos de una aplicación Actividades Servicios Broadcast receivers Content providers
Modelo de Aplicaciones [1] Actividad Presenta una interfaz de usuario enfocada en algo que el usuario puede realizar Elegir un contacto, seleccionar una fotografía,... Una aplicación consistirá en un conjunto de actividades independientes que trabajan juntas Una de las actividades se marca como la inicial al arrancar una aplicación Servicio No tiene UI Se ejecuta en background por periodo indefinido Ej. Reproductor de música Expone una interfaz para interactuar Ej. Parar la reproducción de música Es posible acceder desde otros componentes o aplicaciones
Modelo de Aplicaciones [2] Broadcast receivers No realiza ningún acción por si mismo Recibe y reacciona ante anuncios de tipo broadcast Existen muchos originados por el sistema Ej. Batería baja Las aplicaciones puede lanzar un broadcast No tienen UI, aunque pueden iniciar una actividad para atender al anuncio Content providers Expone un conjunto especifico de datos a otras aplicaciones Los datos pueden estar almacenados en cualquier lugar: fichero, SQLite, internet,... Hace uso de un ContentResolver para acceder a los datos expuestos por un content provider
Modelo de Aplicaciones [3] Activación de los componentes Content providers Al recibir una petición desde un ContentResolver Actividades, Servicios y Broadcast Receivers Al recibir un mensaje asíncrono llamado Intención (Intent) En actividades y servicios Representa la intención de querer realizar algo Ej. La intención de seleccionar un contacto como remitente En broadcast receivers Representa el anuncio del comienzo de una acción Ej. Anunciar que se ha pulsado el botón de la cámara Parada de componentes: Los content providers y broadcast receivers tienen por definición un tiempo limitado de actividad, no necesitan pararse explícitamente. Android proporciona métodos para parar de forma ordenada Activities y services que están en ejecución. Cualquier componente puede ser finalizado por el sistema cuando se detecta que no va a utilizarse o se necesitan recursos extras.
Modelo de Aplicaciones [4] El fichero de manifiesto Propiedades de la aplicación Declaración de todos los componentes existentes en la aplicación Intent filters Un componente indica a intenciones puede responder Declaración de los permisos requeridos uses-permission Acceso a determinado, estado del telefono, acceso a internet, etc. Los permisos que requiere se muestran al usuario al instalar la aplicación Declaración de permisos propios Restringe que aplicaciones pueden hacer uso de un determinado componente
Aplicaciones [0] La aplicaciones en Android solo tienen un primer plano que ocupa toda la pantalla Las aplicaciones están formadas por actividades En un momento dado una actividad pasa al primer plano y se coloca por encima de otra formado una pila de actividades El botón back cierra la actividad y recupera de la pila la anterior La aplicaciones en Android no tienen control de su ciclo de vida Deben estar preparadas para su terminación en cualquier momento Cada aplicación se ejecuta en su propio proceso El runtime de Android gestiona el proceso de cada aplicación y por extensión de cada Actividad que contenga. Para programar en Android se requiere un conocimiento de JAVA
Aplicaciones [1] Representa una cosa concreta que puede hacer el usuario - Corresponden con una pantalla de la interfaz de usuario - Muestra los controles de la interfaz de usuario y reacciona ante las interacciones del mismo - Es una clases derivada de la clase Activity - Toda actividad se declara en el archivo AndroidManifest.xml
Aplicaciones [2] Normalmente una aplicación consta de varias actividades - Cada pantalla se implementa como una actividad - Moverse a la siguiente actividad supone llamar al método - startactivity(), - startactivityforresult() - Una aplicación puede reusar actividades de android o de otras aplicaciones
Actividades Android provee de un conjunto de Views para ayudarnos a crear interfaces simples y modificarlos o extenderlos. View Una actividad se compone de todo tipo de controles o widgets llamados View en Android. La clase View es la clase base de todos los widgets. (Button, EditText, TextView...) La clase ViewGroup es la clase base de los layouts y de otras vistas compuestas Creando una actividad public class HolaMundo extends Activity { @Override public void oncreate(bundle saveinstancestate) { super.oncreate(saveinstancestate); setcontentview(r.layout.main); }
Ciclo de Vida [0] Estados de una actividad Activo (Running): La actividad está encima de la pila, es visible, tiene el foco. Pausado (Paused): La actividad es visible pero no tiene el foco. Se alcanza este estado cuando pasa a activa otra actividad transparente o que no ocupa toda la pantalla. Cuando una Actividad es tapada por completo pasa a estar parada. Parado (Stopped): Cuando la actividad no es visible. Se recomienda guardar el estado de la ui, preferencias, etc Destruido (Destroyed): Cuando la Actividad termina, o es matada por el runtime de Android. Sale de la Pila de Actividades.
Ciclo de Vida [1] Métodos de transición de estados oncreate(bundle) Se invoca cuando la Actividad se arranca por primera vez. Se utiliza para tareas de inicialización como crear la interfaz de usuario de la Actividad. Su parámetro es null o información de estado guardada previamente por onsaveinstancestate() onstart() Se invoca cuando la Actividad va a ser mostrada al usuario onresume() Se invoca cuando la actividad va a empezar a interactuar con el usuario onpause() Se invoca cuando la actividad va a pasar al fondo porque otra actividad ha sido lanzada para ponerse delante. Se utiliza para guardar el estado de la Actividad
Ciclo de Vida [2] Métodos de transición de estados onstop() Se invoca cuando la actividad va a dejar de ser visible y no se necesitará durante un tiempo. Si hay escasez de recursos en el sistema, este método podría no llegar a ser invocado y la actividad ser destruida directamente onrestart() Se invoca cuando una actividad parada pasa a estar activa ondestory() Se invoca cuando la Actividad va a ser destruida. Si hay escasez de recursos en el sistema, este método podría no Llegar a ser invocado y la actividad ser destruida directamente.
Ciclo de Vida [3]
Intenciones (Intent) [0] Representan la intención o solicitud de que alguno de los componentes lleve a cabo una tarea Las intenciones ofrecen un servicio de paso de mensajes que permite interconectar componentes de la misma o de distintas aplicaciones Las intenciones se utilizan para: Arrancar actividades Enviar eventos a múltiples destinatarios Hay dos formas de invocar a una intención: explícita, implícita Invocación explícita: Se expecifica explícitamente en código que componente es el encargado de manejar la intención. Invocación implícita: Es la plataforma la que determina, a través de un proceso de resolución de intenciones, que componente es el más apropiado para manerjar la intención. Un componente declara su capacidad para atender a una intención mediante el tag <intent-filter> en el archivo AndroidManifest.xml
Una actividad también se puede lanzar para que devuelva un resultado mediante el método startactivityforresult Cuando termina esta subactividad se llama al método onactivityresult de la actividad padre desde la que fue arrancada Intenciones (Intent) [1] Las intenciones se pueden usar para moverse entre actividades La intención puede ser explícita indicando la actividad destino o implícita especificando una acción y unos datos y dejando que se encuentre la actividad adecuada en tiempo de ejecución Lanzar una actividad de manera explícita Intent intent = new Intent(Context, Activity.class); startactivity(intent); Lanzar una actividad de manera implícita Intent intent = new Intent(Intent.ACTION_DIAL, URI.parse(tel:...)); startactivity(intent);