Sie sind auf Seite 1von 84

Desarrollo de aplicaciones mviles en Android

ndice

Historia Qu es Android? Arquitectura del sistema Entorno de desarrollo

Arquitectura de las aplicaciones


Almacenamiento de datos Multimedia Prctica final
2

Objetivos
Arquitectura de las aplicaciones
Conocer principales componentes lgicos de una aplicacin Android. Integracin & comunicacin entre componentes. Analizar los diferentes tipos de recursos estticos android. Identificar los elementos visuales de una aplicacin android. Describir la funcionalidad de los diferentes widget de un GUI. Conocer las notificaciones, eventos, mens y dilogos del GUI Android. Establecer polticas de permisos y recursos de seguridad a la hora de desarrollar apps Android.
3

Arquitectura de las aplicaciones: Componentes de aplicacin

Principales componentes para el desarrollo de aplicaciones en Android:

Arquitectura de las aplicaciones: Componentes de aplicacin

[76..77]

Interfaces GUI
Views & Widget

[45..75] ViewGroup & Layout [40..44]

Seguridad & Permisos

Notificaciones & Eventos Compound View & Adapters Menus

Componentes Lgicos
Activities Broadcast Receiver Intents Content Provider

[6..39]

Int. Filters Services

Recursos

Arquitectura Aplicaciones: AndroidManifest.xml


Describe los componentes de la aplicacin. Se declaran permisos y libreras necesarias para ejecutar la aplicacin. Icono, min SDK, Metadatos
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="prueba.Android" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloWord" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest>

Arquitectura de las aplicaciones: Componente Activity

Son las ventanas con las que interacta el usuario.


Es la unidad atmica de responsabilidad
Alta cohesin & bajo acoplamiento

Una aplicacin Android puede contener varias Activity, una de ellas marcada como principal. Establecen el contenido visual con: setContentView() Heredan de la clase android.app.Activity
7

Arquitectura de las aplicaciones: Componente Activity II

package com.slashmobility.curso.android; import android.app.Activity; import android.os.Bundle; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
8

Ciclo de vida de la Activity


Estados de la Activity

Cambio configuracin-> Destruye Actividad ANR si la Activity no responde a un evento en 5 segundos o Utilizar handlers para evitar ANR

Mensaje ANR

Ciclo de vida de la Activity


Estados de la Activity
public class HelloWorld extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); }

10

Ciclo de vida de la Activity

11

Ejemplos y ejercicios: Activities-LifeCycle

Crear un proyecto Activities-LifeCycle Este proyecto debe mostrar un mensaje en la salida de Log (System.out) cada vez que la Activity realice una transicin entre estados.

12

Intents: Definicin

Mecanismo para el paso de mensajes, declara la intencin de realizar una accin. Utilizados para iniciar Activities o comunicarlas entre ellas. tiles para desacoplar componentes (no necesitan conocer implementaciones). Existen acciones nativas que pueden ser lanzadas con los Intents (crean las Actividades para realizar esas acciones).
13

Intents: Estructura
Contienen: Action: La accin general a realizar, tal como ACTION_VIEW, ACTION_EDIT... Data: Los datos sobre los que la accin debe operar. Estos se expresan en forma URI (Uniform Resource Identifier) Ejemplo de pares Action / Data: ACTION_VIEW: content://contacts/people/1 ACTION_DIAL: tel://687123456 ACTION_DIAL: content://contacts/people/2
14

Intents: Atributos adicionales

Atributos adicionales:
Category: ofrece informacin adicional sobre el tipo de componente que debe recoger el Intent. Type: tipo MIME de los datos del Intent. No es necesario por defecto. Component: indica qu componente (clase) especificado en AndroidManifest.xml realizar la accin del Intent. Si se especifica, se entregar a una instancia de esa clase, si no Android buscar el componente que mejor considere. Extras: informacin adicional (pares key-value).
15

Intents: Acciones nativas


ACTION_ANSWER: Abre una Actividad para gestionar llamadas entrantes. ACTION_CALL: Inicia una llamada utilizando el nmero pasado en el URI. ACTION_DELETE: Borra una entrada de datos especificados en el URI. ACTION_DIAL: Aparece el dialer con el nmero especificado. ACTION_EDIT: Invoca una actividad para editar la informacin del URI. ACTION_INSERT: inserta nuevos items (por ejemplo, lista de contactos) ACTION_PICK: recupera informacin de un item. ACTION_SEARCH: Invoca una actividad para realizar bsquedas. ACTION_SENDTO: envia un mensaje a un contacto. ACTION_SEND: enva la informacin especificada en el URI. ACTION_VIEW: peticin para ver una informacin de la mejor manera posible. ACTION_WEB_SEARCH: realiza bsquedas Web de la informacin del URI.
16

Intents: Uso en Activities Lanzar una actividad


Context.startActivity(Intent) Activity.startActivityForResult(Intent)
Uri uri = Uri.parse("http://www.google.com"); Intent intent = new Intent(Intent.ACTION_VIEW,uri); startActivity(intent);

17

Ejemplos y ejercicios: Activities-LaunchDemo


Ejemplo

Proyecto Launch: cmo realizar una peticin a Android para realizar algn tipo de accin. En este ejemplo podemos ver cmo se invoca una Activity para abrir una pgina Web.

18

Intents: Explcitos o Implicitos

En los Intents, se puede especificar el destinatario o no:


Explcitos: Si se establece un destinatario (va setComponent(ComponentName) o setClass(Context, Class)), se le enva directamente. Implcitos: Si no hay destinatario, se debe incluir suficiente informacin para que Android determine el mejor componente candidato para ejecutar el Intent.

Android utiliza los Intent-filters para buscar el mejor candidato

19

Intents: Ejemplos comunicacin Activities


Iniciar actividad para recoger los contactos
Uri uri = Uri.parse(content://contacts/people); Intent intent = new Intent(Intent.ACTION_PICK, uri); startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY); ... public void onActivityResult(int requestCode, int resultCode, Intent data) { switch(resultCode) {...} } Iniciar una sub-actividad y esperamos sus resultados. Intent result = new Intent(null, data); result.putExtra(IS_INPUT_CORRECT, inputCorrect); if(TODO_OK) setResult(RESULT_OK, result); else setResult(RESULT_CANCELED, null); finish();

20

Ejemplos y ejercicios: Intent-LaunchClass


Ejemplo

Intent-LaunchClass: cmo se puede invocar a una Activity desde otra utilizando Intents. En este ejemplo podemos ver cmo se invoca una Activity de manera simple con un botn, que muestra una segunda Activity con informacin en la pantalla. Pulsando de nuevo el botn se puede regresar a la Activity anterior.

21

Arquitectura aplicaciones: Intent filters


La manera en que Android sabe como servir un Intent implcito entre todas las aplicaciones instaladas.
Componente que mejor pueda realizar esa accin.

Se registra declarativamente en <intent-filter> AndroidManifest.xml Tres elementos fundamentales para la resolucin: action: nombre de la accin que puede realizar data: tipo MIME, no es obligatorio category: especifica bajo que circunstancias la accin puede ser ejecutada
22

Arquitectura de las aplicaciones: Intent filters

Intent

Intent

23

Ejemplo: Intent Filter


<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="prueba.Android" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ApiDemos" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest>

24

Arquitectura de las aplicaciones: Broadcast Receiver

Utilizados para recibir y actuar ante eventos/mensajes en forma de Intents que genera Android o las apps. Tu aplicacin pueden indicar el deseo de ser notificadas:
Programticamente: Context.registerReceiver() Declarativamente: <receiver> AndroidManifest.xml

Hereda de android.content.BroadcastReceiver
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { //TODO: React to the Intent received. } }
25

BroadcastReceivers - Usos

Ejemplos de uso de BroadcastReceiver:


Entrega Sncrona
Context.sendBroadcast(Intent)

Entrega Asncrona
Context.sendOrderedBroadcast(Intent)

Ejemplos de eventos generados por Android:


android.intent.action.ACTION_BATTERY_LOW android.intent.action.ACTION_HEADSET_PLUG android.intent.action.BOOT_COMPLETED android.provider.Telephony.SMS_RECEIVED android.intent.action.GTALK_CONNECTED android.net.wifi.WIFI_STATE_CHANGED
26

Arquitectura Aplicaciones: Broadcast & Intents


Los Intents tienen la capacidad de enviar mensajes estructurados Los Intents Broadcast se utilizan para notificar oyentes de acciones determinadas o eventos Android utiliza Broadcast Intents para difundir eventos de sistema (bateria baja, llamada entrante...) Se construye dentro de la aplicacin de manera declarativa y se utiliza el mtodo sendBroadcast() para enviarlo. Igual que en un Intent estndar, se fijan los parmetros action, data, y category para que los posibles Broadcast Receivers determinen su inters. Lanzamiento de Broadcast Intent
Intent intent = new Intent(NEW_INTENT); intent.putExtra(param1, value1); intent.putExtra(param2, value2); intent.putExtra(param3, value3); sendBroadcast(intent);
27

Arquitectura de las aplicaciones: Broadcast Intents

Intent

Intents

28

Ejemplos y ejercicios: BroadcastReceiver-Demo

Ejemplo
BroadcastReceiver-Demo: cmo crear filtros para que un BroadcastReceiver pueda recibir un Intent y procesarlo segn necesite. En este ejemplo podemos ver cmo la Activity principal crea un Intent y lo enva modo broadcast (multidifusin). Los componentes oyentes ,en este caso un BroadcastReceiver llamado IncomingReceiver detectar ese evento y mostrar un mensaje por la salida estndar (en este caso el fichero de log, al que se puede acceder va adb logcat)

29

Arquitectura de las aplicaciones: Content Provider

nico mecanismo para compartir datos entre aplicaciones.


En android no hay rea de datos comunes. Permite desacoplar la capa de aplicacin de la capa de datos (data-source agnostic)

Heredar de ContentProvider e implementar una interfaz para consultar y/o modificar los datos. Nunca se trata con el ContentProvider siempre con el ContentResolver. Accesible utilizando una simple URI. Recorrer los datos a travs de un Cursor.
30

Arquitectura Aplicaciones: Proveedores nativos Android

Browser: permite leer o modificar bookmarks, historial del navegador o bsquedas web. CallLog: permite ver o modificar el historial de llamadas (entrantes o salientes). Contacts: Recupera, modifica, o almacena detalles de contactos.

MediaStore: acceso a los recursos multimedia del dispositivo (audio, video...) Settings: acceso a las preferencias del dispositivo

31

Arquitectura Aplicaciones: Interfaz de un contentProvider

Interfaz a implementar del Content Provider

32

Arquitectura Aplicaciones:

Content Providers - consultas

Tres piezas para construir una consulta


URI del content provider. Los nombres de los campos a recibir (Projections) El tipo de datos de dichos campos

Dos mtodos mismos parmetros ContentResolver.query() : Cursor Activity.managedquery(): Cursor Ejemplo Acceso a la agenda de Contactos

33

Arquitectura Aplicaciones: Content Providers - modificaciones

Los datos de un content provider se pueden:


Aadir nuevos registros y valores. Actualizar valores de registros existentes. El tipo de datos de dichos campos
Insert: newValues.put(COLUMN_NAME, newValue); Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues); Update: getContentResolver().update(MyProvider.CONTENT_URI, newValues, where, null); Delete: getContentResolver().delete(myRowUri, null, null);
34

Ejemplos y ejercicios: ContentProvider-Queries


Ejemplo
ContentProvider-Contacts: cmo consultar el Provider de la agenda de contactos. En este ejemplo podemos ver cmo hacer un listado de los contactos que tenemos en la agenda. ContentProvider-CallLog: cmo consultar el Provider de la lista de llamadas. En este ejemplo podemos ver cmo hacer un listado del registro de la duracin de las llamadas del nuestro dispositivo mvil. ContentProvider-CreatingContact: cmo realizar la insercin de un contacto En este ejemplo podemos ver cmo inserta un nuevo contacto programaticamente.

35

Ejemplos y ejercicios: ContentProvider-Queries


Ejemplo

ContentProvider-Queries: cmo crear un ContentProvider que proporcione contenidos predefinidos, creando mtodos par a la consulta y actualizacin de los contenidos del ContentProvider. En este ejemplo podemos ver cmo crear un ContentProvider, listar una lista de datos introducidos por defecto en el proveedor, y aadir nuevas entradas.

36

Arquitectura de las aplicaciones: Componente Service

No tienen UI y de ejecutan en el background de manera indefinida. (XJ: Reproductor msica) Expone una interfaz para conectarse (Bind to) Corren en el mismo thread principal pero tienen ms prioridad que la Activity. Heredan de android.app.Service Location Manager, Media Controller, Notification Manager son ejemplos de Services.
37

Arquitectura Aplicaciones: Services: creacin de servicios Ejemplo de creacin de un servicio:


import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service { @Override public void onCreate() { // TODO: Actions to perform when service is created. } @Override public IBinder onBind(Intent intent) { // TODO: Replace with service binding implementation. return null; }

Actualizar archivo manifest:


<service android:enabled=true android:name=.MyService></service>
38

Servicios & Comunicacin & Intents

Ejemplos de uso de intents en servicios:


Context.startService(Intent) para iniciar un servicio. Context.stopService(Intent): Detiene un servicio StopSelf(): El servicio se detiene el mismo

Bind:
Comunicacin sncrona. Clase android.os.Binder Mtodo public IBinder onBind(Intent intent)
39

Arquitectura Aplicaciones: Services - control de los servicios


Para iniciar un servicio: startService(new Intent(MyService.MY_ACTION)); Para parar un servicio iniciado:
ComponentName service = startService(new Intent(this, BaseballWatch.class)); // Stop a service using the service name. stopService(new Intent(this, service.getClass()));

Para conectar con un servicio (bind()):


1. Crear una clase X que implemente ServiceConnection, con los mtodos onServiceConnected y onServiceDisconnected. 2. Crear una interfaz Y que har de intermediaria entre la Activity y el Service para comunicar. 3. En la clase Service, implementar el mtodo onBind() para que devuelva una instancia de la interfaz Y. 4. Para relacionarlo todo, en la Activity hacer un bindService(Service, X), que relacionar la clase X con el Service. Al hacer esto, en el mtodo onServiceConnected, llegar la instancia de la clase Y que la Activity podr utilizar para invocar mtodos.
40

Ejemplos y ejercicios
Service-CreateService: cmo crear un Service con la funcionalidad mnima
En este ejemplo podemos ver cmo se invoca un servicio utilizando un botn de Start y cmo se para con el botn de Stop.

Service-MusicDemo: cmo utilizar un Service para delegar trabajo que debe ejecutarse en background:
Ejemplo de invocacin de servicio que ejecuta un audio hasta que finaliza.
41

Ejemplos y ejercicios
Service-basicBinding: cmo interactar con un Service Local
Ejemplo para interactar localmente con un Service del que se conoce su implementacin en la clase.

Service-binding: cmo interacta con el Service


Ejemplo para interactuar con el Service, mandando o recibiendo informacin a travs de una interfaz genrica.
class com.slashmobility interface ServiceConnection onServiceConnected(...) onServiceDi sconnected(...)

+ +

i nterface Service

Activ ity -

CounterConnectio n onServiceConnected(...) onServiceDisconnected(...) +

interface ICounterService getCounter(): int

DualServ ice binder: ICounterService onBind(...)

42

Arquitectura Aplicaciones: Ciclo de vida del Service (segn creacin)

43

Arquitectura Aplicaciones: Resumen de componentes

44

Arquitectura de las aplicaciones: Resources

Los recursos (Resources) son elementos externos que se quieren incluir y referenciar en la aplicacin.
Imgenes, videos, audio, textos, layouts,

Se incluyen declarativamente (/res) acediendose @<tipo>/<nombre> Programticamente son accesibles a travs de la clase R (compilada con aapt (Android Asset Packaging Tool)) R.resource_tipo.resource_nombre
45

Resources: Tipos de Recursos


Cada tipo de recurso en una carpeta /res.
drawable: Imgenes, Iconos, layout: Layout para organizar views. values:
string.xml: Cadenas de texto de la app. colors.xml: Gama de colores de la app. dimens.xml: Tamao de las fuentes.

anim: Animaciones y efectos. raw: Recursos rasos (audio, video). menu: Mens y dilogos. xml: Resto xml (Preferencias, app widget, )

46

Resources: Sufijos (Qualifiers)


Cada tipo de recurso puede tener su propia configuracin segn contexto. Se aade un sufijo /tiporecurso-xxx L10N & I18N
Language: (-es, -en, -de, ) Country Code: (-123) Region: (-ca, -us, )

Pantallas
Orientation: (-land, -port & -square) Pixel density: (-hdpi, -mdpi & -ldpi) Navigation: (D-pad, trackball & wheel) Size: (small, normal & large)

47

Version: API (-v1, etc)

Ejemplos y ejercicios: Resource-Images


Resources-Image: en este ejemplo se muestra cmo utilizar recursos tipo imgenes en un linear layout.

48

Ejemplos y ejercicios: Resources


Resources-Multilanguage: en este ejemplo se muestra cmo utilizar la internacionalizacin
Este ejemplo se muestra cmo al cambiar el idioma se puede utilizar una fuente de datos distinta.

Resources-ChangeConfig: en este ejemplo se muestra cmo Android detecta los cambios de configuracin
Se puede ver como cambian las imgenes segn idioma y orientacin del dispositivo.
49

Ejemplos y ejercicios: Resources-XML


Resources-XML: en este ejemplo se muestra cmo utilizar los recursos de tipo xml, situados en /res/values/words.xml
Este ejemplo accede a la informacin de los ficheros XML (/res/xml/words.xml) y muestra una lista con los datos clickables.

50

Arquitectura de las aplicaciones: Interfaces de usuario (UI)

En Android, las interfaces se construyen utilizando los objetos View y ViewGroup Las Views son el punto de interaccin con el usuario (setContentView() en Activity) Las ViewGroup son una agrupacin lgica de elementos visuales (Views)
android.widget = subclases View con funcionalidad

51

Interfaces de usuario: Views


Unidad bsica de componente de UI Todas los controles visuales heredan de la clase android.view.View Ocupa un rea rectangular en la pantalla. Son responsable de dibujarse:
Sus medidas, layout, como se pintan,

Tambin gestionan los eventos = interacciones que reciben del usuario:


Cambio de focus, scrolling, clicks, gestos, ...

Se pueden crear por cdigo (programticamente) o por XML (declarativamente)


52

Interfaces de usuario: Widget


Son Views preconstruidas que vienen incluidas en la plataforma Android. NO confundir con App Widget! Estn incluidos en el paquete android.widget. Son casi 50 clases y 30 interfaces
Button, TextView, EditText, ListView, CheckBox, RadioButton, Gallery, Spinner AutoCompleteTextView, ImageSwitcher & TextSwitcher.

Se pueden customizar y crear widget nuevos.


Extender un subclase de View. Implementar algunos override methods.
onDraw(), onMeasure() & onKeyDown()

Listo para usar tu nuevo widget!


53

Cmo Android pinta Views?


Cada ViewGroup responsable de pedir a sus hijos que se pinten. Cada View se pinta a travs del mtodo draw(). El proceso de pintar layout consiste en:
measure(int, int): Cuanto de grande es control. layout(int, int, int, int): Cada padre es responsable de posicionar a sus hijos en base a las medidas anteriores.

Para lo anterior padre e hijo se comunican con dos clase


View.MeasureSpec : UNSPECIFIED, EXACTLY & AT_MOST. ViewGroup.LayoutParams : FILL_PARENT, WRAP_CONTENT, <nmero exacto>
54

Interfaces de usuario: Programticamente NO recomendable ya que: Creacin de vista programtica nos acoplamos a los detalles visuales del cdigo. Deberamos repetir cdigo para L10N, I18N, diferentes tamaos pantalla & pixel,
public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView myTextView = new TextView(this); myTextView.setText(Hola Clase); setContentView(myTextView);
}

55

Interfaces de usuario: Declarativamente - Por XML

En el archivo /res/layout/main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- crea un layout con la distribucin de los elementos visuales --> <TextView android:id="@+id/myTestView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/jupiter"/> <!-- crea un widget TextView --> </LinearLayout>

En el cdigo de la Activity:
public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); //recurso main.xml TextView myTextView = (TextView)findViewById(R.id.myTextView); myTextView.setText(Hola clase); }
56

Ejemplos y ejercicios: Views-SimpleViews

Ejemplo
Views-SimpleViews: en este ejemplo se puede ver cmo se pueden crear Views, cambiar sus atributos y sobrescribir sus mtodos para aadir funcionalidad. La Activity principal AndroidViews crea a travs del men de la aplicacin (pulsando el botn men del dispositivo) una serie de opciones que invocarn otras Activities que muestran distintas Views (Button, CheckBox, EditText, RadioGroup, Spinner)

57

Interfaces de usuario: Layouts


Su objetivo es controlar la posicin de las Views hijas en la pantalla. Organizados jerrquicamente. Tambin conocidos como Layout Managers. Son extensiones de ViewGroup Se pueden anidar, es decir, incluir Layouts dentro de Layouts Android proporciona una serie de Layouts por defecto.
58

Interfaces de usuario: Tipos Layouts


FrameLayout: el ms simple, aade cada View hija en la esquina superior izquierda. Cada vez que se aade una, tapa la anterior, diseado para mostrar un nico elemento. LinearLayout: aade cada View hija en linea recta (horizontal o vertical) RelativeLayout: aade las Views unas en relacin a otras. TableLayout: aade las Views usando un grid (cuadrcula), a travs de filas y columnas. Es similar a las tablas HTML. AbsoluteLayout: aade las vistas dando coordenadas absolutas.
LinearLayout RelativeLayout AbsoluteLayout

59

Interfaces de usuario: ViewGroups


Objetos ViewGroup que albergan hijos View:
Algunos contienen su propia estructura grfica (form UI) Otros son estructuras invisibles para gestionar el layout de sus hijos.

60

Interfaces de usuario: Layouts Atributos XML


ID: (android:id="@+id/my_button): Identificador unvoco del View. Layout Parameters: android:layout_XXX): Son heredables. Varan segn el tipo de layout
layout_width, layout_height: wrap_content | fill_parent layout_position: Expresada en pixels, se recomienda (dp) size: Tamao expresado en pares (height, width) paddings margins.
61

Ejemplos y ejercicios: Layout


Layouts-Linear: en este ejemplo se muestra cmo distribuir las vistas de una manera lineal. La Activity principal LinearLayoutDemo muestra cmo se pueden modificar las posiciones de las vistas en tiempo de ejecucin. En el archivo main.xml se han creado distintos Layouts. Remarcar la utilizacin del atributo orientation. Layouts-Relative: en este ejemplo se muestra cmo distribuir las vistas de una manera relativa entre las Views. Analizar el archivo main.xml, donde se muestra cmo crear tres vistas, relativas unas a otras. Layouts-Scroll: distribucin con Scroll de las vistas En este ejemplo se puede ver un TableLayout scrollable con Views simples. Layouts-Table: ejemplo simple donde distribuir las Views en forma de tabla Analizar el archivo main.xml, donde se muestra cmo crear distintas vistas en forma de tabla, similar a HTML.
62

Arquitectura de las aplicaciones: Notificaciones al usuario

Una vez aadido View/Widget a nuestro UI, necesitamos conocer como interaccionar/notificar al usuario. Algunas notificaciones requieren respuesta del usuario, otras no. Ejemplos: batera baja, confirmacin de recepcin de un archivo, barras de progreso, etc. Para cada tipo de notificacin se requerir una manera concreta de informar al usuario: vibracin, iluminacin LEDs
63

Arquitectura de las aplicaciones: Captura de eventos

Definiendo un Event Listener

Sobrescribiendo un Handler de un evento concreto del View.

64

Arquitectura de las aplicaciones: Notificaciones al usuario


Toast: Para breves mensajes desde el background Status Bar: Para recordatorios persistentes que requieren del usuario

Dialog: Para notificaciones relacionadas con la Activity

65

Ejemplos y ejercicios: Notifications-Demo

Ejemplo
Notifications-Demo: en este ejemplo se muestra algunos de los distintos mecanismos para mostrar notificaciones La Activity principal muestra una serie de botones que invocan distintos eventos de notificacin al usuario.

66

Interfaces de usuario: componentes compuestos (I)

Normalmente hacen referencia a Views con funcionalidad compleja aadida Para crear componentes compuestos, se pueden crear Views y aadirle mtodos para la gestin de eventos, componentes visuales, etc Se pueden extender (heredar) componentes de Android por defecto, sobrescribiendo la funcionalidad que se necesite

67

Interfaces de usuario: componentes compuestos (II)


TextView ListView Spinner

EditText con un Button

68

Interfaces de usuario: componentes compuestos (III)

DatePicker

TimePicker

AutoComplete

69

Interfaces de usuario: AdapterView

Son View cuyos hijos estn determinados por un Adapter. Encargados de rellenar datos (binding) y gestionar selecciones de usuario (handling). tiles cuando queremos mostrar visualmente datos almacenados
View AdapterView Adapter Datos
Button, ImageButton, EditText, ListView, GridView, Spinner, Gallery, .. CursorAdapter, ListAdapter, SpinnerAdapter, Content Provider, Cursor, String {}, File, URI

70

Ejemplos y ejercicios: Compound Views


Compound-Autocomplete: en este ejemplo se muestra como tener un campo donde Android da sugerencias de posibles palabras a rellenar. La Activity principal muestra un campo de Autocomplete, con un Adapter que hace de puente entre el campo y las posibles sugerencias. Compound-Grid: en este ejemplo se una lista de Views distribuidas en forma de grid en la pantalla Se muestra cmo distribuir elementos de tipo View por la pantalla, utilizando un Adapter que sobrescribe los mtodos necesarios y aplicando el Layout correspondiente. Compound-List: ejemplo simple que visualiza una lista de Views. Se muestra una lista simple aplicando Layouts utilizando un ArrayAdapter. Compound-Spinner: se muestra como realizar un Spinner con Adapters Se crea nuevamente un ArrayAdapter con la informacin, pero esta vez la propia Spinner lo utiliza para formatear los elementos. Compound-DatePicker: se muestra como utilizar los pickers de fecha y hora Se crea una Actividad que muestra los controles para modificar fecha y hora.
71

Interfaces de usuario: Menus


Proporcionan interfaces amigables que muestran la funcionalidad de nuestra app. Android facilita la creacin de estos mens estandarizndolos. Tambin se pueden crear a travs de XML.
En /res directorio /menu .xml con <menu> & <item> MenuInflater.inflate(R.menu.x)

Tres tipos de mens de aplicacin.


72

Menus: Options Menu


Contiene un mximo de 6 elementos con iconos.
Si se necesitan ms, se incluyen en el men extendido (aparece al pusar el botn + )

El nico que no soporta checkbox ni radio-buttons. La primera vez que se abra, Android llamar al mtodo onCreateOptionsMenu() de la Activity Cuando el usuario presione una opcin del men, se invocar el mtodo onOptionsItemSelected()
73

Menus: Options Menu (II)


Creacin de Option Menu va cdigo:
/* Creates the menu items */ public boolean onCreateOptionsMenu(Menu menu) { menu.add(0, MENU_NEW_GAME, 0, "New Game"); menu.add(0, MENU_QUIT, 0, "Quit"); return true; } /* Handles item selections */ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_NEW_GAME: newGame(); return true; case MENU_QUIT: quit(); return true; } return false;
}

74

Ejemplos y ejercicios: Menu-OptionMenu


Ejemplo
Menu-OptionMenu: en este ejemplo se muestra como crear un Option Menu y interactuar con l. La Activity principal SimpleShowMenuDemo crea un botn que al presionarlo muestra el Option Menu de la aplicacin. Como se ha comentado, este men tambin puede ser accedido presionando el botn MENU del dispositivo. El Menu, est formado por varios elementos textuales a los que se les asigna una serie de identificadores. Al seleccionar uno de los elementos del men, el mtodo onOptionsItemSelected recibir el evento y podr utilizar esos identificadores para saber la opcin escogida.
75

Menus: Context Menu


Conceptualmente similar al botn derecho del ratn en el PC. Presin sobre la vista unos dos segundos. Al aparecer, se invocar el mtodo onCreateContextMenu() Al seleccionar, se invocar el mtodo onContextItemSelected()
Para asociar una View a este menu
registerForContextMenu (View view)

76

Menus: Context Menu (II)


Creacin de Context Menu va cdigo:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, EDIT_ID, 0, "Edit"); menu.add(0, DELETE_ID, 0, "Delete"); } public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case EDIT_ID: editNote(info.id); return true; case DELETE_ID: deleteNote(info.id); return true; default: return super.onContextItemSelected(item); } }
77

Ejemplos y ejercicios: Menu-ContextMenu


Ejemplo
Menu-ContextMenu: se muestra de qu manera utilizar los ContextMenu, mens dependientes de las vistas sobre las que se presiona. La Activity principal registra dos Views (en este caso dos botones) para que puedan mostrar ContextMenus. El mtodo onCreateContextMenu de la Activity se sobrescribe y se invoca al crear un ContextMenu en la Activity. En este caso, en funcin de la View (Botn ) seleccionado, se muestra un men o otro, y al seleccionar una de las opciones se muestra una informacin por pantalla.
78

Menus: Submenus

Se puede aadir dentro de cualquier men, excepto en otro submen. Ideal para categorizar funcionalidades de nuestra app. Igual que en los Option Menu, al pulsar de invocar el mtodo onOptionsItemSelected()
79

Menus: Submenus (II)


Creacin de SubMenu va cdigo:
public boolean onCreateOptionsMenu(Menu menu) { boolean result = super.onCreateOptionsMenu(menu); SubMenu fileMenu = menu.addSubMenu("File"); SubMenu editMenu = menu.addSubMenu("Edit"); fileMenu.add("new"); fileMenu.add("open"); fileMenu.add("save"); editMenu.add("undo"); editMenu.add("redo"); return result; }

80

Ejemplos y ejercicios: Menu-SubMenu


Ejemplo
Menu-SubMenu: se muestra de qu manera crear Submenus dentro de los OptionMenu. La Activity principal SimpleShowMenuDemo crea un botn que al presionarlo muestra el Option Menu de la aplicacin. Como se ha comentado, este men tambin puede ser accedido presionando el botn MENU del dispositivo. En este caso, se puede comprobar como al crear las opciones de men (mtodo onCreateOptionsMenu) se aaden las opciones de submen.

81

Arquitectura de las aplicaciones: Seguridad y permisos Seguridad basada en el Kernel de Linux, cada paquete tiene un nico userID y procesos en sandbox, por lo que no pueden ser afectados entre s Los permisos son un mecanismo a nivel de aplicacin, que permiten el acceso a un recurso determinado (Red, envo de SMS..) Se pueden crear en AndroidManifest.xml
<permission android:name=com.paad.DETONATE_DEVICE android:protectionLevel=dangerous android:label=Self Destruct android:description=@string/detonate_description> </permission>

Y se pueden asignar en el tag activity:


<activity android:name=.MyActivity android:label=@string/app_name android:permission=com.paad.DETONATE_DEVICE> </activity>
82

Ejemplos y ejercicios: Seguridad


Ejemplo
1. 2. 3. 4. 5.

Aplicacin de mail: configurar una cuenta de correo de Android. Ejecutar la aplicacin Email del emulador y configurar una cuenta de correo En la ruta /data/data/com.android.email/databases tenemos las bases de datos relacionadas con el correo. Si ejecutamos >sqlite3 database podemos conectarnos con las BD de la aplicacin. Al ejecutar >.tables se pueden ver las listas de tablas de la BD. Al ejecutar >select * from messages; se puede ver los mails de usuarios. Esto es una infraccin de seguridad, ya que deberan disponer de algn tipo de encriptacin.

83

Conclusiones
Arquitectura de las aplicaciones
Conocer principales componentes lgicos de una aplicacin Android. Integracin & comunicacin entre componentes. Analizar los diferentes tipos de recursos estticos android. Identificar los elementos visuales de una aplicacin android. Describir la funcionalidad de los diferentes widget de un GUI. Conocer las notificaciones, eventos, mens y dilogos del GUI Android. Establecer polticas de permisos y recursos de seguridad a la hora de desarrollar apps Android.
84

Interfaces GUI
[76..77] [45..75] Views & ViewGroup Widget & Layout Notificaciones & Eventos Compound View & Adapters Menus [40..44]

Seguridad & Permisos

Componentes Lgicos [6..39]


Activities Int. Filters Content Provider Intents Broadcast Receiver Services

Recursos

Das könnte Ihnen auch gefallen