sergio aguado gonzález [email protected]
TRANSCRIPT
¿Qué es Android? Requisitos para programar Estructura de una aplicación Activities, intents y ciclo de vida
Índice
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?
Programar aplicaciones utilizando su framework de desarrollo
Personalizar el sistema operativo o realizar aplicaciones nativas… (CyanogenMod)
¿Qué se puede hacer con Android?
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++!!!
Arquitectura de Android
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
Librerías◦ Escritas en C y C++. Se acceden a través del
framework de aplicación Kernel
Arquitectura de Android
Hello Android!!!
Hello Android!!!
Hello Android!!!
Activities Recursos
◦ Layout◦ Imágenes◦ Strings◦ Otros: animaciones, colores, menus, estilo, raw
AndroidManifest.xml
Estructura básica de una aplicación
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); }}
Una jerarquía de vistas◦ Componentes visuales (View)◦ Contentedores (ViewGroup)
Layout
◦ Componentes visuales Label Button Image Date y Time Picker Map WebView
Layout
◦ Contenedores: LinearLayout TableLayout RelativeLayout TabLayout AbsoluteLayout (NO!!)
Layout
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
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
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);
Una aplicación puede registrarse mediante filtros a cualquier Intent.
No hay aplicación más importante que otra
Flujo de navegación. Intent
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>
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
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
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
Ciclo de vida de una actividadV
ida c
om
ple
ta
Ciclo de vida de una actividadV
ida v
isib
le
Ciclo de vida de una actividadV
ida c
on
foco
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
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
Diferentes tamaños de pantalla
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
No trabajar con Absolute Layout Tener recursos para distintas
densidades (low, medium, high) Usar dips y nunca pixels
Diferentes tamaños de pantalla