Sergio Aguado González [email protected] .

32
Desarrollo con Android Sergio Aguado González [email protected] http://www.cuatroochenta.com

Transcript of Sergio Aguado González [email protected] .

Page 1: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Desarrollo con Android

Sergio Aguado Gonzá[email protected]

http://www.cuatroochenta.com

Page 2: Sergio Aguado González sergio.aguado@cuatroochenta.com .

¿Qué es Android? Requisitos para programar Estructura de una aplicación Activities, intents y ciclo de vida

Índice

Page 3: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Un sistema operativo basado en Linux para dispositivos móviles

Una máquina virtual Java (Dalvik) Un SDK y un framework de aplicación con

diversas librerías:◦ 2D y 3D◦ SQLite◦ Media, Bluetooth, Cámara, GPS, brújula,

acelerómetro,…

¿Qué es Android?

Page 4: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Programar aplicaciones utilizando su framework de desarrollo

Personalizar el sistema operativo o realizar aplicaciones nativas… (CyanogenMod)

¿Qué se puede hacer con Android?

Page 5: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Eclipse Plugin ADT (Android Developer Tools) Android SDK Lenguaje de programación Java

http://developer.android.com/sdk/installing.html

¿Qué se necesita para programar en Android?

o C y C++!!!

Page 6: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Arquitectura de Android

Page 7: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Aplicaciones◦ Todas las aplicaciones tienen los mismos permisos

y las mismas restricciones Framework de aplicación

◦ Infraestructura que ofrece Android para no reinventar la rueda: Componentes visuales Gestión del ciclo de vida de la aplicación

Arquitectura de Android

Page 8: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Librerías◦ Escritas en C y C++. Se acceden a través del

framework de aplicación Kernel

Arquitectura de Android

Page 9: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Hello Android!!!

Page 10: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Hello Android!!!

Page 11: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Hello Android!!!

Page 12: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Activities Recursos

◦ Layout◦ Imágenes◦ Strings◦ Otros: animaciones, colores, menus, estilo, raw

AndroidManifest.xml

Estructura básica de una aplicación

Page 13: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Cada una de las pantallas de una aplicación Para mostrar componentes visuales se

utilizan los layouts

Activity

public class HelloActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}

Page 14: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Una jerarquía de vistas◦ Componentes visuales (View)◦ Contentedores (ViewGroup)

Layout

Page 15: Sergio Aguado González sergio.aguado@cuatroochenta.com .

◦ Componentes visuales Label Button Image Date y Time Picker Map WebView

Layout

Page 16: Sergio Aguado González sergio.aguado@cuatroochenta.com .

◦ Contenedores: LinearLayout TableLayout RelativeLayout TabLayout AbsoluteLayout (NO!!)

Layout

Page 17: Sergio Aguado González sergio.aguado@cuatroochenta.com .

El flujo de una aplicación se define como una sucesión de Activities

De la misma aplicación o entre diferentes aplicaciones (colaborar!!!!!!)

Las actividades comunican lo que quieren a través de Intents

Flujo de navegación

Page 18: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Descripción de una acción a realizar Dos tipos de Intents:

◦ Explícitos: Se indica la actividad concreta◦ Implícitos: Se indica lo que se quiere (mostrar un

navegador, enviar un correo,…) Se compone de:

◦ Acción: Qué se quiere hacer◦ Uri: El dato principal (teléfono, id de un contacto)◦ Categoría: Información adicional de la acción◦ Extras (Bundle): un hash donde incluir más datos

Flujo de navegación. Intent

Page 19: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Ejemplos de acciones:◦ ACTION_MAIN◦ ACTION_VIEW◦ ACTION_PICK◦ ACTION_SEND◦ ACTION_CALL

Flujo de navegación. Intent

String uri = "tel:964964964";Intent intent = new Intent(Intent.ACTION_CALL);intent.setData(Uri.parse(uri));startActivity(intent);

String asunto = "Asunto";String texto = "Algo de texto";Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);emailIntent.setType("plain/text");emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"[email protected]"});emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, asunto);emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, texto);startActivity(Intent.createChooser(emailIntent, "Send your email in:"));//startActivity(emailIntent);

Page 20: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Una aplicación puede registrarse mediante filtros a cualquier Intent.

No hay aplicación más importante que otra

Flujo de navegación. Intent

Page 21: Sergio Aguado González sergio.aguado@cuatroochenta.com .

La activity inicial también se inicia con un Intent

Flujo de navegación. Intent

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="es.uji.decharlas.android" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloActivity” android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MailActivity” android:label="@string/mail_title"> </activity>

<!– Otras actividades . . . . . . . . .

-- > </application></manifest>

Page 22: Sergio Aguado González sergio.aguado@cuatroochenta.com .

El paquete de la aplicación (nombre único) Componentes de la aplicación (actividades,

servicios, …) Qué Intents pueden pueden gestionar Permisos que necesita la aplicación para

funcionar: acceder a la posicion, utilizar la cámara, recibir smss,…

Librerías necesarias (p.e. Google Maps)

AndroidManifest.xml

Page 23: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Idea principal: minimizar consumo de recursos

Se divide el flujo de navegación mediante Activities

Las activities:◦ se inician◦ se paran◦ se destruyen si ya no se necesitan

Ciclo de vida de una actividad

Page 24: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Básicamente hay tres estados:◦ Activo: Se está ejecutando y está visible en

pantalla◦ Pausada: Está todavía visible en pantalla pero no

tiene el foco◦ Parada: No está visible en pantalla y ya no se está

ejecutando

Ciclo de vida de una actividad

Page 25: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Ciclo de vida de una actividadV

ida c

om

ple

ta

Page 26: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Ciclo de vida de una actividadV

ida v

isib

le

Page 27: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Ciclo de vida de una actividadV

ida c

on

foco

Page 28: Sergio Aguado González sergio.aguado@cuatroochenta.com .

onCreate: Crear vistas, popular listas. Recuperar estado previo si lo hay

onRestart: onStart: onResume: si hay algo parado volverlo a ejecutar.

Recuparar onPause: pausar todo aquello que requiera de

mucha CPU. Por ejemplo animaciones. Guardar información necesaria pues pueden matar el proceso sin previo aviso

onStop: onDestroy:

Ciclo de vida de una actividad

Page 29: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Android cuenta con dispositivos con distint@s:◦ Tamaños de pantalla◦ Resoluciones de pantalla◦ Relaciones de aspecto◦ Densidad de píxels (píxels por pulgada)

Diferentes tamaños de pantalla

http://www.google.com/phone/

Ejemplo: Una imagen de 200x200 pixels no se ve igual de grande en todos los dispositivos

Page 30: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Diferentes tamaños de pantalla

Page 31: Sergio Aguado González sergio.aguado@cuatroochenta.com .

Density Independent Pixel: Unidad de píxel “virtual” para poder definir una interfaz de usuario de forma independiente

Diferentes tamaños de pantalla

1dip = 1 pixel en una pantalla de 160 dpi (punto por pulgada)

pixels = dips * (density / 160)

http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density

Page 32: Sergio Aguado González sergio.aguado@cuatroochenta.com .

No trabajar con Absolute Layout Tener recursos para distintas

densidades (low, medium, high) Usar dips y nunca pixels

Diferentes tamaños de pantalla