SlideShare une entreprise Scribd logo
1  sur  80
1
Desarrollo de aplicaciones
móviles en Android
Índice
2
Historia
¿Qué es Android?
Arquitectura del sistema
Entorno de desarrollo
Arquitectura de las
aplicaciones
Almacenamiento de
datos
Multimedia
Práctica final
Presentación
Objetivos
3
Arquitectura de las
aplicaciones
 Conocer principales componentes
lógicos de una aplicación Android.
 Integración & comunicación entre
componentes.
 Analizar los diferentes tipos de
recursos estáticos android.
 Identificar los elementos visuales de
una aplicación android.
 Describir la funcionalidad de los
diferentes widget de un GUI.
 Conocer las notificaciones, eventos,
menús y diálogos del GUI Android.
 Establecer políticas de permisos y
recursos de seguridad a la hora de
desarrollar apps Android.
Arquitectura de las aplicaciones: Componentes de aplicación
 Principales componentes para el desarrollo de
aplicaciones en Android:
4
Arquitectura de las aplicaciones: Componentes de aplicación
5
Interfaces GUI [45..75]
Componentes Lógicos [6..39]
Activities Intents Int. Filters
Broadcast
Receiver
Content
Provider
Services
Views & Widget
ViewGroup &
Layout
Menus
Notificaciones & Eventos
Compound View & Adapters
Arquitectura Aplicaciones: AndroidManifest.xml
 Describe los componentes de la
aplicación.
 Se declaran permisos y
librerías necesarias para
ejecutar la aplicación.
 Icono, min SDK, Metadatos
6
<?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
7
Son las ventanas con las que interactúa el
usuario.
 Es la unidad atómica de responsabilidad
 Alta cohesión & bajo acoplamiento
 Una aplicación Android puede contener varias
Activity, una de ellas marcada como principal.
 Establecen el contenido visual con:
setContentView(…)
 Heredan de la clase android.app.Activity
Arquitectura de las aplicaciones: Componente Activity II
8
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);
}
}
Ciclo de vida de la Activity
 Cambio configuración->
Destruye Actividad
 ANR si la Activity no
responde a un evento
en 5 segundos o
 Utilizar handlers para
evitar ANR
9
Mensaje ANR
Estados de la Activity
Ciclo de vida 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
Estados de la
Activity
Ciclo de vida de la Activity
11
Intents: Definición
12
 Mecanismo para el paso de mensajes, declara
la intención de realizar una acción.
 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).
Intents: Estructura
13
 Contienen:
 Action: La acción general a realizar, tal como
ACTION_VIEW, ACTION_EDIT...
 Data: Los datos sobre los que la acción 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
Intents: Atributos adicionales
 Atributos adicionales:
 Category: ofrece información 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
acción del Intent. Si se especifica, se entregará a
una instancia de esa clase, si no Android buscará el
componente que mejor considere.
 Extras: información adicional (pares key-value).
14
Intents: Acciones nativas
 ACTION_ANSWER: Abre una Actividad para gestionar llamadas entrantes.
 ACTION_CALL: Inicia una llamada utilizando el número pasado en el URI.
 ACTION_DELETE: Borra una entrada de datos especificados en el URI.
 ACTION_DIAL: Aparece el dialer con el número especificado.
 ACTION_EDIT: Invoca una actividad para editar la información del URI.
 ACTION_INSERT: inserta nuevos items (por ejemplo, lista de contactos)
 ACTION_PICK: recupera información de un item.
 ACTION_SEARCH: Invoca una actividad para realizar búsquedas.
 ACTION_SENDTO: envia un mensaje a un contacto.
 ACTION_SEND: envía la información especificada en el URI.
 ACTION_VIEW: petición para ver una información de la mejor manera
posible.
 ACTION_WEB_SEARCH: realiza búsquedas Web de la información del
URI.
15
Intents: Uso en Activities
16
 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);
Ejemplos y ejercicios: Activities-LaunchDemo
17
Ejemplo
 Proyecto Launch: cómo
realizar una petición a
Android para realizar
algún tipo de acción.
 En este ejemplo podemos
ver cómo se invoca una
Activity para abrir una
página Web.
Intents: Explícitos o Implicitos
18
 En los Intents, se puede especificar el
destinatario o no:
 Explícitos: Si se establece un destinatario (vía
setComponent(ComponentName) o
setClass(Context, Class)), se le envía directamente.
 Implícitos: Si no hay destinatario, se debe incluir
suficiente información para que Android determine el
mejor componente candidato para ejecutar el Intent.
 Android utiliza los Intent-filters para buscar el
mejor candidato
Intents: Ejemplos comunicación Activities
19
 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();
Ejemplos y ejercicios: Intent-LaunchClass
20
Ejemplo
 Intent-LaunchClass: cómo se
puede invocar a una Activity
desde otra utilizando Intents.
 En este ejemplo podemos ver
cómo se invoca una Activity de
manera simple con un botón,
que muestra una segunda
Activity con información en la
pantalla. Pulsando de nuevo el
botón se puede regresar a la
Activity anterior.
Arquitectura aplicaciones: Intent filters
21
La manera en que Android sabe como servir un
Intent implícito entre todas las aplicaciones
instaladas.
 Componente que mejor pueda realizar esa acción.
Se registra declarativamente en <intent-filter>
AndroidManifest.xml
Tres elementos fundamentales para la
resolución:
action: nombre de la acción que puede
realizar
data: tipo MIME, no es obligatorio
category: especifica bajo que circunstancias
la acción puede ser ejecutada
Arquitectura de las aplicaciones: Intent filters
22
Intent
Intent
Ejemplo: Intent Filter
23
<?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>
Arquitectura de las aplicaciones: Broadcast Receiver
24
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.
}
}
 Utilizados para recibir y actuar ante eventos/mensajes
en forma de Intents que genera Android o las apps.
 Tu aplicación pueden indicar el deseo de ser
notificadas:
 Programáticamente: Context.registerReceiver()
 Declarativamente: <receiver> AndroidManifest.xml
 Hereda de android.content.BroadcastReceiver
BroadcastReceivers - Usos
25
 Ejemplos de uso de BroadcastReceiver:
 Entrega Síncrona
 Context.sendBroadcast(Intent)
 Entrega Asíncrona
 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
Arquitectura Aplicaciones: Broadcast & Intents
26
Intent intent = new Intent(NEW_INTENT);
intent.putExtra(“param1”, value1);
intent.putExtra(“param2”, value2);
intent.putExtra(“param3”, value3);
sendBroadcast(intent);
Lanzamiento de Broadcast Intent
 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 aplicación de manera declarativa y se
utiliza el método sendBroadcast() para enviarlo.
 Igual que en un Intent estándar, se fijan los parámetros action, data,
y category para que los posibles Broadcast Receivers determinen su
interés.
Arquitectura de las aplicaciones: Broadcast Intents
27
Intent
Intents
Ejemplos y ejercicios: BroadcastReceiver-Demo
28
Ejemplo
 BroadcastReceiver-Demo: cómo
crear filtros para que un
BroadcastReceiver pueda recibir un
Intent y procesarlo según necesite.
 En este ejemplo podemos ver cómo
la Activity principal crea un
Intent y lo envía modo broadcast
(multidifusión). Los componentes
“oyentes” ,en este caso un
BroadcastReceiver llamado
IncomingReceiver detectará ese
evento y mostrará un mensaje por
la salida estándar (en este caso
el fichero de log, al que se puede
acceder vía adb logcat)
Arquitectura de las aplicaciones: Content Provider
29
 Único mecanismo para compartir datos entre
aplicaciones.
 En android no hay área de datos comunes.
 Permite desacoplar la capa de aplicación 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 través de un Cursor.
Arquitectura Aplicaciones: Proveedores nativos Android
30
 Browser: permite leer o
modificar bookmarks,
historial del navegador o
búsquedas 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.
Arquitectura Aplicaciones: Interfaz de un contentProvider
31
 Interfaz a implementar del Content Provider
Arquitectura Aplicaciones: Content Providers - consultas
32
 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 métodos mismos parámetros
 ContentResolver.query(…) : Cursor
 Activity.managedquery(…): Cursor
Ejemplo Acceso a la agenda de Contactos
Arquitectura Aplicaciones: Content Providers - modificaciones
33
 Los datos de un content provider se pueden:
 Añadir nuevos registros y valores.
 Actualizar valores de registros existentes.
 El tipo de datos de dichos campos
Update:
getContentResolver().update(MyProvider.CONTENT_URI,
newValues, where, null);
Delete:
getContentResolver().delete(myRowUri, null, null);
Insert:
newValues.put(COLUMN_NAME, newValue);
Uri myRowUri =
getContentResolver().insert(MyProvider.CONTENT_URI,
newValues);
Ejemplos y ejercicios: ContentProvider-Queries
34
Ejemplo
 ContentProvider-Queries:
cómo crear un
ContentProvider que
proporcione contenidos
predefinidos, creando
métodos par a la consulta y
actualización de los contenidos
del ContentProvider.
 En este ejemplo podemos ver
cómo crear un
ContentProvider, listar una
lista de datos introducidos
por defecto en el proveedor,
y añadir nuevas entradas.
Arquitectura de las aplicaciones: Componente Service
35
 No tienen UI y de ejecutan en el background de
manera indefinida. (XJ: Reproductor música)
 Expone una interfaz para conectarse (Bind to)
 Corren en el mismo thread principal pero tienen
más prioridad que la Activity.
 Heredan de android.app.Service
 Location Manager, Media Controller, Notification
Manager son ejemplos de Services.
Servicios & Comunicación & Intents
36
 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:
 Comunicación síncrona.
 Clase android.os.Binder
 Método
public IBinder
onBind(Intent
intent)
Arquitectura Aplicaciones: Services: creación de servicios
37
Ejemplo de creación 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>
Arquitectura Aplicaciones: Services - control de los servicios
38
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 métodos
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 método 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
método onServiceConnected, llegará la instancia de la clase Y que la
Activity podrá utilizar para invocar métodos.
Ejemplos y ejercicios
39
class com.slashmobility
Activ ity CounterConnection
- onServiceConnected(...)
- onServiceDisconnected(...)
«interface»
ServiceConnection
+ onServiceConnected(...)
+ onServiceDisconnected(...)
«interface»
ICounterService
+ getCounter(): int
DualServ ice
- binder: ICounterService
- onBind(...)
«interface»
Service
 Service-CreateService: cómo crear un Service con la
funcionalidad mínima
En este ejemplo podemos ver cómo se invoca un servicio utilizando un
botón de Start y cómo se para con el botón de Stop.
 Service-MusicDemo: cómo utilizar un Service para delegar
trabajo que debe ejecutarse en background:
Ejemplo de invocación de servicio que ejecuta un audio hasta que
finaliza.
 Service-binding: cómo interactúa con el Service
Ejemplo para interactuar con el Service, mandando o recibiendo
información a través de una interfaz genérica.
Arquitectura Aplicaciones: Ciclo de vida del Service (según creación)
40
Arquitectura Aplicaciones: Resumen de componentes
41
Arquitectura de las aplicaciones: Resources
42
 Los recursos (Resources) son
elementos externos que se quieren
incluir y referenciar en la aplicación.
 Imágenes, videos, audio, textos, layouts,
 Se incluyen declarativamente (/res)
acediendose @<tipo>/<nombre>
 Programáticamente son accesibles
a través de la clase R (compilada
con aapt (Android Asset Packaging Tool))
R.resource_tipo.resource_nombre
Resources: Tipos de Recursos
43
 Cada tipo de recurso en una
carpeta /res.
 drawable: Imágenes, 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: Tamaño de las fuentes.
 anim: Animaciones y efectos.
 raw: Recursos rasos (audio, video).
 menu: Menús y diálogos.
 xml: Resto xml (Preferencias, app
widget, …)
Resources: Sufijos (Qualifiers)
44
 Cada tipo de recurso puede tener su
propia configuración según contexto.
 Se añade 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)
 Version: API (-v1, etc)
 …
Ejemplos y ejercicios: 8- Resource-Images
45
Resources-Image: en este
ejemplo se muestra cómo
utilizar recursos tipo
imágenes en un linear
layout.
Ejemplos y ejercicios: 9 – Resources-XML
46
 Resources-XML: en este
ejemplo se muestra cómo
utilizar los recursos de tipo
xml, situados en
/res/values/words.xml
Este ejemplo accede a la información de
los ficheros XML (/res/xml/words.xml) y
muestra una lista con los datos
clickables.
Arquitectura de las aplicaciones: Interfaces de usuario (UI)
47
 En Android, las interfaces se construyen
utilizando los objetos View y ViewGroup
 Las Views son el punto de interacción con
el usuario (setContentView() en Activity)
 Las ViewGroup son una agrupación lógica
de elementos visuales (Views)
 android.widget = subclases View con funcionalidad
Interfaces de usuario: Views
48
 Unidad básica 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, …
 También gestionan los eventos = interacciones
que reciben del usuario:
 Cambio de focus, scrolling, clicks, gestos, ...
 Se pueden crear por código (programáticamente)
o por XML (declarativamente)
Interfaces de usuario: Widget
49
 Son Views ‘preconstruidas’ que vienen incluidas
en la plataforma Android.
 ¡NO confundir con App Widget!
 Están 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!
¿Cómo Android pinta Views?
50
 Cada ViewGroup responsable de pedir
a sus hijos que se pinten.
 Cada View se pinta a través del método
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, <número exacto>…
Interfaces de usuario: Programáticamente
51
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView myTextView = new
TextView(this);
myTextView.setText(“Hola Clase”);
setContentView(myTextView);
}
NO recomendable ya que:
Creación de vista programática nos
acoplamos a los detalles visuales del
código.
Deberíamos repetir código para L10N,
I18N, diferentes tamaños pantalla & pixel,
…
Interfaces de usuario: Declarativamente - Por XML
52
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 distribución 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 código 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”);
}
Ejemplos y ejercicios: Views-SimpleViews
53
Ejemplo
 Views-SimpleViews: en este
ejemplo se puede ver cómo
se pueden crear Views,
cambiar sus atributos y
sobrescribir sus métodos
para añadir funcionalidad.
 La Activity principal
AndroidViews crea a través del
menú de la aplicación (pulsando
el botón menú del dispositivo)
una serie de opciones que
invocarán otras Activities que
muestran distintas Views
(Button, CheckBox, EditText,
RadioGroup, Spinner…)
Interfaces de usuario: Layouts
54
 Su objetivo es controlar la
posición de las Views hijas en
la pantalla.
 Organizados jerárquicamente.
 También 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.
Interfaces de usuario: Tipos Layouts
55
LinearLayout RelativeLayout AbsoluteLayout
 FrameLayout: el más simple, añade cada View hija en la esquina
superior izquierda. Cada vez que se añade una, tapa la anterior,
diseñado para mostrar un único elemento.
 LinearLayout: añade cada View hija en linea recta (horizontal o
vertical)
 RelativeLayout: añade las Views unas en relación a otras.
 TableLayout: añade las Views usando un grid (cuadrícula), a
través de filas y columnas. Es similar a las tablas HTML.
 AbsoluteLayout: añade las vistas dando coordenadas absolutas.
Interfaces de usuario: ViewGroups
56
 Objetos ViewGroup que albergan hijos View:
 Algunos contienen su propia estructura gráfica (form UI)
 Otros son estructuras ‘invisibles’ para gestionar el layout de sus hijos.
Interfaces de usuario: Layouts Atributos XML
57
 ID:
(android:id="@+id/my_button“):
 Identificador unívoco del
View.
Layout Parameters: android:layout_XXX):
Son heredables.
Varían según el tipo de layout
 layout_width, layout_height: wrap_content | fill_parent
 layout_position: Expresada en pixels, se recomienda
(dp)
 size: Tamaño expresado en pares (height, width)
 paddings margins.
Ejemplos y ejercicios: Layout
58
 Layouts-Linear: en este ejemplo se muestra cómo
distribuir las vistas de una manera lineal.
La Activity principal LinearLayoutDemo muestra cómo se
pueden modificar las posiciones de las vistas en tiempo de
ejecución. En el archivo main.xml se han creado distintos
Layouts. Remarcar la utilización del atributo orientation.
 Layouts-Relative: en este ejemplo se muestra cómo
distribuir las vistas de una manera relativa entre las
Views.
Analizar el archivo main.xml, donde se muestra cómo crear
tres vistas, relativas unas a otras.
 Layouts-Scroll: distribución 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 cómo crear
distintas vistas en forma de tabla, similar a HTML.
Arquitectura de las aplicaciones: Notificaciones al usuario
59
 Una vez añadido View/Widget a
nuestro UI, necesitamos conocer
como interaccionar/notificar al
usuario.
 Algunas notificaciones requieren
respuesta del usuario, otras no.
 Ejemplos: batería baja, confirmación
de recepción de un archivo, barras
de progreso, etc.
 Para cada tipo de notificación se
requerirá una manera concreta de
informar al usuario: vibración,
iluminación LEDs
Arquitectura de las aplicaciones: Captura de eventos
60
 Definiendo un Event Listener
 Sobrescribiendo un Handler de un
evento concreto del View.
Arquitectura de las aplicaciones: Notificaciones al usuario
61
Toast:
Para breves mensajes
desde el background
Status Bar:
Para recordatorios persistentes
que requieren del usuario
Dialog:
Para notificaciones relacionadas
con la Activity
Ejemplos y ejercicios: Notifications-Demo
62
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
notificación al usuario.
Interfaces de usuario: componentes compuestos (I)
63
 Normalmente hacen referencia
a Views con funcionalidad
compleja añadida
 Para crear componentes
compuestos, se pueden crear
Views y añadirle métodos para
la gestión de eventos,
componentes visuales, etc
 Se pueden extender (heredar)
componentes de Android por
defecto, sobrescribiendo la
funcionalidad que se necesite
Interfaces de usuario: componentes compuestos (II)
64
TextView
EditText con un Button
ListView Spinner
Interfaces de usuario: componentes compuestos (III)
65
DatePicker TimePicker AutoComplete
Interfaces de usuario: AdapterView
66
 Son View cuyos hijos están
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
Ejemplos y ejercicios: Compound Views
67
 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 cómo distribuir elementos de tipo View por la pantalla,
utilizando un Adapter que sobrescribe los métodos 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 información, 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.
Interfaces de usuario: Menus
68
 Proporcionan interfaces
amigables que muestran la
funcionalidad de nuestra app.
 Android facilita la creación de
estos menús
estandarizándolos.
 También se pueden crear a
través de XML.
 En /res directorio /menu
 .xml con <menu> & <item>
 MenuInflater.inflate(R.menu.x)
 Tres tipos de menús de
aplicación.
Menus: Options Menu
69
 Contiene un máximo de 6
elementos con iconos.
 Si se necesitan más, se incluyen en el
menú extendido (aparece al pusar el
botón + )
 El único que no soporta checkbox
ni radio-buttons.
 La primera vez que se abra,
Android llamará al método
onCreateOptionsMenu() de la
Activity
 Cuando el usuario presione una
opción del menú, se invocará el
método onOptionsItemSelected()
Menus: Options Menu (II)
70
 Creación de Option Menu vía código:
/* 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;
}
Ejemplos y ejercicios: Menu-OptionMenu
71
Ejemplo
 Menu-OptionMenu: en este ejemplo
se muestra como crear un Option
Menu y interactuar con él.
 La Activity principal
SimpleShowMenuDemo crea un botón
que al presionarlo muestra el Option
Menu de la aplicación. Como se ha
comentado, este menú también puede
ser accedido presionando el botón 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 método onOptionsItemSelected
recibirá el evento y podrá utilizar esos
identificadores para saber la opción
escogida.
Menus: Context Menu
72
 Conceptualmente similar al
botón derecho del ratón en el
PC.
 Presión sobre la vista unos dos
segundos.
 Al aparecer, se invocará el
método onCreateContextMenu()
 Al seleccionar, se invocará el
método onContextItemSelected()
 Para asociar una View a este menu
 registerForContextMenu (View view)
Menus: Context Menu (II)
73
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);
}
}
 Creación de Context Menu vía código:
Ejemplos y ejercicios: Menu-ContextMenu
74
Ejemplo
 Menu-ContextMenu: se muestra
de qué manera utilizar los
ContextMenu, menús
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 método onCreateContextMenu de
la Activity se sobrescribe y se
invoca al crear un ContextMenu en
la Activity. En este caso, en función
de la View (Botón ) seleccionado,
se muestra un menú o otro, y al
seleccionar una de las opciones se
muestra una información por
pantalla.
Menus: Submenus
 Se puede añadir 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
método onOptionsItemSelected()
75
Menus: Submenus (II)
76
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;
}
 Creación de SubMenu vía código:
Ejemplos y ejercicios: Menu-SubMenu
77
Ejemplo
 Menu-SubMenu: se muestra de
qué manera crear Submenus
dentro de los OptionMenu.
 La Activity principal
SimpleShowMenuDemo crea un botón
que al presionarlo muestra el Option
Menu de la aplicación. Como se ha
comentado, este menú también puede
ser accedido presionando el botón
MENU del dispositivo.
En este caso, se puede comprobar
como al crear las opciones de menú
(método onCreateOptionsMenu) se
añaden las opciones de submenú.
Arquitectura de las aplicaciones: Seguridad y permisos
78
 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 aplicación, que
permiten el acceso a un recurso determinado (Red, envío 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>
Ejemplos y ejercicios: Seguridad
79
Ejemplo
 Aplicación de mail: configurar una cuenta de correo de
Android.
1. Ejecutar la aplicación Email del emulador y configurar una cuenta de correo
2. En la ruta /data/data/com.android.email/databases tenemos las bases de
datos relacionadas con el correo.
3. Si ejecutamos >sqlite3 database podemos conectarnos con las BD de la
aplicación.
4. Al ejecutar >.tables se pueden ver las listas de tablas de la BD.
5. Al ejecutar >select * from messages; se puede ver los mails de usuarios.
Esto es una infracción de seguridad, ya que deberían disponer de algún tipo
de encriptación.
Conclusiones
80
Arquitectura de las
aplicaciones
 Conocer principales componentes
lógicos de una aplicación Android.
 Integración & comunicación entre
componentes.
 Analizar los diferentes tipos de
recursos estáticos android.
 Identificar los elementos visuales de
una aplicación android.
 Describir la funcionalidad de los
diferentes widget de un GUI.
 Conocer las notificaciones, eventos,
menús y diálogos del GUI Android.
 Establecer políticas de permisos y
recursos de seguridad a la hora de
desarrollar apps Android.
Interfaces GUI
[45..75]
Componentes
Lógicos [6..39]
Activities Intents
Int. Filters
Broadcast
Receiver
Content
Provider
Services
Views &
Widget
ViewGroup
& Layout
Menus
Notificaciones & Eventos
Compound View &
Adapters

Contenu connexe

Tendances

02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcionalJuan Rodríguez
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Static typing vs dynamic typing languages
Static typing vs dynamic typing languagesStatic typing vs dynamic typing languages
Static typing vs dynamic typing languagesJawad Khan
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de ContextoBrayhan Acosta
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Conceitos e arquitetura do sistema de banco de dados
Conceitos e arquitetura do sistema de banco de dadosConceitos e arquitetura do sistema de banco de dados
Conceitos e arquitetura do sistema de banco de dadosElaine Cecília Gatto
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoVinícius de Paula
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCSteven Smith
 
DISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDASDISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDASNatalia Ludeña
 
Comandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizComandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizBolivar Castillo
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netpp mm
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesHumano Terricola
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 

Tendances (20)

02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
Identificadores palabras clave y tipos Java
Identificadores palabras clave y tipos JavaIdentificadores palabras clave y tipos Java
Identificadores palabras clave y tipos Java
 
Static typing vs dynamic typing languages
Static typing vs dynamic typing languagesStatic typing vs dynamic typing languages
Static typing vs dynamic typing languages
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Conceitos e arquitetura do sistema de banco de dados
Conceitos e arquitetura do sistema de banco de dadosConceitos e arquitetura do sistema de banco de dados
Conceitos e arquitetura do sistema de banco de dados
 
Aula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de ProjetoAula 02 - UML e Padrões de Projeto
Aula 02 - UML e Padrões de Projeto
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Domain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVCDomain-Driven Design with ASP.NET MVC
Domain-Driven Design with ASP.NET MVC
 
DISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDASDISEÑO DE BASES DE DATOS DISTRIBUIDAS
DISEÑO DE BASES DE DATOS DISTRIBUIDAS
 
Comandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-lizComandos del-ddl-y-del-dml-liz
Comandos del-ddl-y-del-dml-liz
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
9.laravel
9.laravel9.laravel
9.laravel
 
Automatas de pila
Automatas de pilaAutomatas de pila
Automatas de pila
 
Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
 
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regularesPortafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
Portafolio unidad 2 [Lenguajes y autómatas]- Expresiones y lenguajes regulares
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Tabla mccall
Tabla mccallTabla mccall
Tabla mccall
 
JavaScript Patterns
JavaScript PatternsJavaScript Patterns
JavaScript Patterns
 

En vedette

Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas AvanzadosDesarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas AvanzadosGabriel Huecas
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidSantiago Márquez Solís
 
Arquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidArquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidEventos Creativos
 
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA Jacinto Cabrera Rodríguez
 
Introducción a Android para desarrolladores Java
Introducción a Android para desarrolladores JavaIntroducción a Android para desarrolladores Java
Introducción a Android para desarrolladores JavaCésar Suárez Ortega
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicaciónJose Antonio Vacas
 
Proyecto en Android Studio (MoviCuenca)
Proyecto en Android Studio (MoviCuenca)Proyecto en Android Studio (MoviCuenca)
Proyecto en Android Studio (MoviCuenca)TaniaLandivarO
 
Integración sistemasembebidosaplicacionesmóviles
Integración sistemasembebidosaplicacionesmóvilesIntegración sistemasembebidosaplicacionesmóviles
Integración sistemasembebidosaplicacionesmóvilesSBCTecnologias S.A. de C.V.
 
Intro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en OlotIntro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en Olothojalataverde
 
How-to-Videos
How-to-VideosHow-to-Videos
How-to-VideosPlus-PR
 
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...Augustus Hall Limited (RC.912580)
 

En vedette (20)

Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas AvanzadosDesarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
 
Curso desarrollo en android
Curso desarrollo en androidCurso desarrollo en android
Curso desarrollo en android
 
Fundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para AndroidFundamentos del Desarrollo de Aplicaciones para Android
Fundamentos del Desarrollo de Aplicaciones para Android
 
Arquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en AndroidArquitectura, aplicaciones y seguridad en Android
Arquitectura, aplicaciones y seguridad en Android
 
Curso Introducción a android
Curso Introducción a androidCurso Introducción a android
Curso Introducción a android
 
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA
ENTORNOS DE DESARROLLO: ANDROID STUDIO - ESTRUCTURA
 
Sistema operativo android
Sistema operativo androidSistema operativo android
Sistema operativo android
 
Introducción a Android para desarrolladores Java
Introducción a Android para desarrolladores JavaIntroducción a Android para desarrolladores Java
Introducción a Android para desarrolladores Java
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicación
 
Proyecto en Android Studio (MoviCuenca)
Proyecto en Android Studio (MoviCuenca)Proyecto en Android Studio (MoviCuenca)
Proyecto en Android Studio (MoviCuenca)
 
Integración sistemasembebidosaplicacionesmóviles
Integración sistemasembebidosaplicacionesmóvilesIntegración sistemasembebidosaplicacionesmóviles
Integración sistemasembebidosaplicacionesmóviles
 
1.entorno de desarrollo
1.entorno de desarrollo1.entorno de desarrollo
1.entorno de desarrollo
 
Intro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en OlotIntro. a Android Instituto Bosc de la Coma en Olot
Intro. a Android Instituto Bosc de la Coma en Olot
 
Android Studio
Android Studio Android Studio
Android Studio
 
Entendiendo android
Entendiendo androidEntendiendo android
Entendiendo android
 
STEALTH_brochure
STEALTH_brochureSTEALTH_brochure
STEALTH_brochure
 
How-to-Videos
How-to-VideosHow-to-Videos
How-to-Videos
 
Residus de xamota ceràmica_Butlletí_11/13
Residus de xamota ceràmica_Butlletí_11/13Residus de xamota ceràmica_Butlletí_11/13
Residus de xamota ceràmica_Butlletí_11/13
 
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...
Accounts Receivables-Management-Round-Table-for Q1 2017 #Credit #Collection #...
 

Similaire à Desarrollo android - 4 - arquitectura de aplicación

Similaire à Desarrollo android - 4 - arquitectura de aplicación (20)

Introduccion a Android
Introduccion a AndroidIntroduccion a Android
Introduccion a Android
 
presentacion de actividades e intent.pptx
presentacion de actividades e intent.pptxpresentacion de actividades e intent.pptx
presentacion de actividades e intent.pptx
 
Android bootcamp 101 v2.0
Android bootcamp 101 v2.0Android bootcamp 101 v2.0
Android bootcamp 101 v2.0
 
Píldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª partePíldoras android i. Intro - 2ª parte
Píldoras android i. Intro - 2ª parte
 
Appcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en AndroidAppcircus Academy: Integración de Social Media en Android
Appcircus Academy: Integración de Social Media en Android
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Android
 
Preguntas sobre android
Preguntas sobre androidPreguntas sobre android
Preguntas sobre android
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Tema 4 4_1_intenciones_servicios
Tema 4 4_1_intenciones_serviciosTema 4 4_1_intenciones_servicios
Tema 4 4_1_intenciones_servicios
 
Preguntas sobre android
Preguntas sobre androidPreguntas sobre android
Preguntas sobre android
 
Curso Desarrollo Android
Curso Desarrollo AndroidCurso Desarrollo Android
Curso Desarrollo Android
 
Android Pres3
Android Pres3Android Pres3
Android Pres3
 
Cuestionario android
Cuestionario androidCuestionario android
Cuestionario android
 
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidTutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
 
Pre karla
Pre karlaPre karla
Pre karla
 
Preguntas sobre android
Preguntas sobre androidPreguntas sobre android
Preguntas sobre android
 
Preguntas android
Preguntas androidPreguntas android
Preguntas android
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
Android master class
Android master classAndroid master class
Android master class
 

Plus de Emilio Aviles Avila

Experiencias emprendedor de apps - AppCierta
Experiencias emprendedor de apps - AppCiertaExperiencias emprendedor de apps - AppCierta
Experiencias emprendedor de apps - AppCiertaEmilio Aviles Avila
 
Aplicaciones móviles, experiencias de emprendedor
Aplicaciones móviles, experiencias de emprendedorAplicaciones móviles, experiencias de emprendedor
Aplicaciones móviles, experiencias de emprendedorEmilio Aviles Avila
 
Charla estrategia desarrollo aplicaciones móviles Universidad Girona
Charla estrategia desarrollo aplicaciones móviles Universidad GironaCharla estrategia desarrollo aplicaciones móviles Universidad Girona
Charla estrategia desarrollo aplicaciones móviles Universidad GironaEmilio Aviles Avila
 
Desarrollo android - 6 - multimedia
Desarrollo android - 6 - multimediaDesarrollo android - 6 - multimedia
Desarrollo android - 6 - multimediaEmilio Aviles Avila
 
Desarrollo android - 5 - almacenamiento de datos
Desarrollo android  -  5 - almacenamiento de datosDesarrollo android  -  5 - almacenamiento de datos
Desarrollo android - 5 - almacenamiento de datosEmilio Aviles Avila
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrolloEmilio Aviles Avila
 
Desarrollo android - 2 - arquitectura del sistema
Desarrollo android   - 2 - arquitectura del sistemaDesarrollo android   - 2 - arquitectura del sistema
Desarrollo android - 2 - arquitectura del sistemaEmilio Aviles Avila
 
Desarrollo android -1 - introduccion
Desarrollo android  -1 - introduccionDesarrollo android  -1 - introduccion
Desarrollo android -1 - introduccionEmilio Aviles Avila
 
El mercado de las aplicaciones moviles
El mercado de las aplicaciones movilesEl mercado de las aplicaciones moviles
El mercado de las aplicaciones movilesEmilio Aviles Avila
 
Curso Taller Android Procesado Imagen
Curso Taller Android Procesado ImagenCurso Taller Android Procesado Imagen
Curso Taller Android Procesado ImagenEmilio Aviles Avila
 
Curso taller android radio streaming
Curso taller android  radio streamingCurso taller android  radio streaming
Curso taller android radio streamingEmilio Aviles Avila
 
Curso Uml 3.1 Modelos De Desarrollo De Software
Curso Uml   3.1 Modelos De Desarrollo De SoftwareCurso Uml   3.1 Modelos De Desarrollo De Software
Curso Uml 3.1 Modelos De Desarrollo De SoftwareEmilio Aviles Avila
 
Curso Uml 2.5 Diagramas De ImplementacióN
Curso Uml   2.5 Diagramas De ImplementacióNCurso Uml   2.5 Diagramas De ImplementacióN
Curso Uml 2.5 Diagramas De ImplementacióNEmilio Aviles Avila
 

Plus de Emilio Aviles Avila (20)

Experiencias emprendedor de apps - AppCierta
Experiencias emprendedor de apps - AppCiertaExperiencias emprendedor de apps - AppCierta
Experiencias emprendedor de apps - AppCierta
 
Apps Ser o Estar
Apps Ser o EstarApps Ser o Estar
Apps Ser o Estar
 
Aplicaciones móviles, experiencias de emprendedor
Aplicaciones móviles, experiencias de emprendedorAplicaciones móviles, experiencias de emprendedor
Aplicaciones móviles, experiencias de emprendedor
 
Charla estrategia desarrollo aplicaciones móviles Universidad Girona
Charla estrategia desarrollo aplicaciones móviles Universidad GironaCharla estrategia desarrollo aplicaciones móviles Universidad Girona
Charla estrategia desarrollo aplicaciones móviles Universidad Girona
 
Desarrollo android - 6 - multimedia
Desarrollo android - 6 - multimediaDesarrollo android - 6 - multimedia
Desarrollo android - 6 - multimedia
 
Desarrollo android - 5 - almacenamiento de datos
Desarrollo android  -  5 - almacenamiento de datosDesarrollo android  -  5 - almacenamiento de datos
Desarrollo android - 5 - almacenamiento de datos
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrollo
 
Desarrollo android - 2 - arquitectura del sistema
Desarrollo android   - 2 - arquitectura del sistemaDesarrollo android   - 2 - arquitectura del sistema
Desarrollo android - 2 - arquitectura del sistema
 
Desarrollo android -1 - introduccion
Desarrollo android  -1 - introduccionDesarrollo android  -1 - introduccion
Desarrollo android -1 - introduccion
 
El mercado de las aplicaciones moviles
El mercado de las aplicaciones movilesEl mercado de las aplicaciones moviles
El mercado de las aplicaciones moviles
 
Curso Taller Android Procesado Imagen
Curso Taller Android Procesado ImagenCurso Taller Android Procesado Imagen
Curso Taller Android Procesado Imagen
 
Taller Curso android WhereAmI
Taller Curso android WhereAmITaller Curso android WhereAmI
Taller Curso android WhereAmI
 
Curso taller android radio streaming
Curso taller android  radio streamingCurso taller android  radio streaming
Curso taller android radio streaming
 
Como ganar dinero con las apps
Como ganar dinero con las appsComo ganar dinero con las apps
Como ganar dinero con las apps
 
Curso introducción a android
Curso introducción a android   Curso introducción a android
Curso introducción a android
 
TeCHmi Service Portfolio
TeCHmi Service PortfolioTeCHmi Service Portfolio
TeCHmi Service Portfolio
 
Curso Uml 3.2 Proceso Unificado
Curso Uml   3.2 Proceso UnificadoCurso Uml   3.2 Proceso Unificado
Curso Uml 3.2 Proceso Unificado
 
Curso Uml 3.1 Modelos De Desarrollo De Software
Curso Uml   3.1 Modelos De Desarrollo De SoftwareCurso Uml   3.1 Modelos De Desarrollo De Software
Curso Uml 3.1 Modelos De Desarrollo De Software
 
Curso Uml 2.6 Otros Diagramas
Curso Uml   2.6 Otros DiagramasCurso Uml   2.6 Otros Diagramas
Curso Uml 2.6 Otros Diagramas
 
Curso Uml 2.5 Diagramas De ImplementacióN
Curso Uml   2.5 Diagramas De ImplementacióNCurso Uml   2.5 Diagramas De ImplementacióN
Curso Uml 2.5 Diagramas De ImplementacióN
 

Dernier

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 

Dernier (20)

tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 

Desarrollo android - 4 - arquitectura de aplicación

  • 2. Índice 2 Historia ¿Qué es Android? Arquitectura del sistema Entorno de desarrollo Arquitectura de las aplicaciones Almacenamiento de datos Multimedia Práctica final Presentación
  • 3. Objetivos 3 Arquitectura de las aplicaciones  Conocer principales componentes lógicos de una aplicación Android.  Integración & comunicación entre componentes.  Analizar los diferentes tipos de recursos estáticos android.  Identificar los elementos visuales de una aplicación android.  Describir la funcionalidad de los diferentes widget de un GUI.  Conocer las notificaciones, eventos, menús y diálogos del GUI Android.  Establecer políticas de permisos y recursos de seguridad a la hora de desarrollar apps Android.
  • 4. Arquitectura de las aplicaciones: Componentes de aplicación  Principales componentes para el desarrollo de aplicaciones en Android: 4
  • 5. Arquitectura de las aplicaciones: Componentes de aplicación 5 Interfaces GUI [45..75] Componentes Lógicos [6..39] Activities Intents Int. Filters Broadcast Receiver Content Provider Services Views & Widget ViewGroup & Layout Menus Notificaciones & Eventos Compound View & Adapters
  • 6. Arquitectura Aplicaciones: AndroidManifest.xml  Describe los componentes de la aplicación.  Se declaran permisos y librerías necesarias para ejecutar la aplicación.  Icono, min SDK, Metadatos 6 <?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>
  • 7. Arquitectura de las aplicaciones: Componente Activity 7 Son las ventanas con las que interactúa el usuario.  Es la unidad atómica de responsabilidad  Alta cohesión & bajo acoplamiento  Una aplicación Android puede contener varias Activity, una de ellas marcada como principal.  Establecen el contenido visual con: setContentView(…)  Heredan de la clase android.app.Activity
  • 8. Arquitectura de las aplicaciones: Componente Activity II 8 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); } }
  • 9. Ciclo de vida de la Activity  Cambio configuración-> Destruye Actividad  ANR si la Activity no responde a un evento en 5 segundos o  Utilizar handlers para evitar ANR 9 Mensaje ANR Estados de la Activity
  • 10. Ciclo de vida 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 Estados de la Activity
  • 11. Ciclo de vida de la Activity 11
  • 12. Intents: Definición 12  Mecanismo para el paso de mensajes, declara la intención de realizar una acción.  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 13  Contienen:  Action: La acción general a realizar, tal como ACTION_VIEW, ACTION_EDIT...  Data: Los datos sobre los que la acción 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 información 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 acción del Intent. Si se especifica, se entregará a una instancia de esa clase, si no Android buscará el componente que mejor considere.  Extras: información adicional (pares key-value). 14
  • 15. Intents: Acciones nativas  ACTION_ANSWER: Abre una Actividad para gestionar llamadas entrantes.  ACTION_CALL: Inicia una llamada utilizando el número pasado en el URI.  ACTION_DELETE: Borra una entrada de datos especificados en el URI.  ACTION_DIAL: Aparece el dialer con el número especificado.  ACTION_EDIT: Invoca una actividad para editar la información del URI.  ACTION_INSERT: inserta nuevos items (por ejemplo, lista de contactos)  ACTION_PICK: recupera información de un item.  ACTION_SEARCH: Invoca una actividad para realizar búsquedas.  ACTION_SENDTO: envia un mensaje a un contacto.  ACTION_SEND: envía la información especificada en el URI.  ACTION_VIEW: petición para ver una información de la mejor manera posible.  ACTION_WEB_SEARCH: realiza búsquedas Web de la información del URI. 15
  • 16. Intents: Uso en Activities 16  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 17 Ejemplo  Proyecto Launch: cómo realizar una petición a Android para realizar algún tipo de acción.  En este ejemplo podemos ver cómo se invoca una Activity para abrir una página Web.
  • 18. Intents: Explícitos o Implicitos 18  En los Intents, se puede especificar el destinatario o no:  Explícitos: Si se establece un destinatario (vía setComponent(ComponentName) o setClass(Context, Class)), se le envía directamente.  Implícitos: Si no hay destinatario, se debe incluir suficiente información 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 comunicación Activities 19  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 20 Ejemplo  Intent-LaunchClass: cómo se puede invocar a una Activity desde otra utilizando Intents.  En este ejemplo podemos ver cómo se invoca una Activity de manera simple con un botón, que muestra una segunda Activity con información en la pantalla. Pulsando de nuevo el botón se puede regresar a la Activity anterior.
  • 21. Arquitectura aplicaciones: Intent filters 21 La manera en que Android sabe como servir un Intent implícito entre todas las aplicaciones instaladas.  Componente que mejor pueda realizar esa acción. Se registra declarativamente en <intent-filter> AndroidManifest.xml Tres elementos fundamentales para la resolución: action: nombre de la acción que puede realizar data: tipo MIME, no es obligatorio category: especifica bajo que circunstancias la acción puede ser ejecutada
  • 22. Arquitectura de las aplicaciones: Intent filters 22 Intent Intent
  • 23. Ejemplo: Intent Filter 23 <?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 24 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. } }  Utilizados para recibir y actuar ante eventos/mensajes en forma de Intents que genera Android o las apps.  Tu aplicación pueden indicar el deseo de ser notificadas:  Programáticamente: Context.registerReceiver()  Declarativamente: <receiver> AndroidManifest.xml  Hereda de android.content.BroadcastReceiver
  • 25. BroadcastReceivers - Usos 25  Ejemplos de uso de BroadcastReceiver:  Entrega Síncrona  Context.sendBroadcast(Intent)  Entrega Asíncrona  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 26 Intent intent = new Intent(NEW_INTENT); intent.putExtra(“param1”, value1); intent.putExtra(“param2”, value2); intent.putExtra(“param3”, value3); sendBroadcast(intent); Lanzamiento de Broadcast Intent  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 aplicación de manera declarativa y se utiliza el método sendBroadcast() para enviarlo.  Igual que en un Intent estándar, se fijan los parámetros action, data, y category para que los posibles Broadcast Receivers determinen su interés.
  • 27. Arquitectura de las aplicaciones: Broadcast Intents 27 Intent Intents
  • 28. Ejemplos y ejercicios: BroadcastReceiver-Demo 28 Ejemplo  BroadcastReceiver-Demo: cómo crear filtros para que un BroadcastReceiver pueda recibir un Intent y procesarlo según necesite.  En este ejemplo podemos ver cómo la Activity principal crea un Intent y lo envía modo broadcast (multidifusión). Los componentes “oyentes” ,en este caso un BroadcastReceiver llamado IncomingReceiver detectará ese evento y mostrará un mensaje por la salida estándar (en este caso el fichero de log, al que se puede acceder vía adb logcat)
  • 29. Arquitectura de las aplicaciones: Content Provider 29  Único mecanismo para compartir datos entre aplicaciones.  En android no hay área de datos comunes.  Permite desacoplar la capa de aplicación 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 través de un Cursor.
  • 30. Arquitectura Aplicaciones: Proveedores nativos Android 30  Browser: permite leer o modificar bookmarks, historial del navegador o búsquedas 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 31  Interfaz a implementar del Content Provider
  • 32. Arquitectura Aplicaciones: Content Providers - consultas 32  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 métodos mismos parámetros  ContentResolver.query(…) : Cursor  Activity.managedquery(…): Cursor Ejemplo Acceso a la agenda de Contactos
  • 33. Arquitectura Aplicaciones: Content Providers - modificaciones 33  Los datos de un content provider se pueden:  Añadir nuevos registros y valores.  Actualizar valores de registros existentes.  El tipo de datos de dichos campos Update: getContentResolver().update(MyProvider.CONTENT_URI, newValues, where, null); Delete: getContentResolver().delete(myRowUri, null, null); Insert: newValues.put(COLUMN_NAME, newValue); Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues);
  • 34. Ejemplos y ejercicios: ContentProvider-Queries 34 Ejemplo  ContentProvider-Queries: cómo crear un ContentProvider que proporcione contenidos predefinidos, creando métodos par a la consulta y actualización de los contenidos del ContentProvider.  En este ejemplo podemos ver cómo crear un ContentProvider, listar una lista de datos introducidos por defecto en el proveedor, y añadir nuevas entradas.
  • 35. Arquitectura de las aplicaciones: Componente Service 35  No tienen UI y de ejecutan en el background de manera indefinida. (XJ: Reproductor música)  Expone una interfaz para conectarse (Bind to)  Corren en el mismo thread principal pero tienen más prioridad que la Activity.  Heredan de android.app.Service  Location Manager, Media Controller, Notification Manager son ejemplos de Services.
  • 36. Servicios & Comunicación & Intents 36  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:  Comunicación síncrona.  Clase android.os.Binder  Método public IBinder onBind(Intent intent)
  • 37. Arquitectura Aplicaciones: Services: creación de servicios 37 Ejemplo de creación 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. Arquitectura Aplicaciones: Services - control de los servicios 38 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 métodos 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 método 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 método onServiceConnected, llegará la instancia de la clase Y que la Activity podrá utilizar para invocar métodos.
  • 39. Ejemplos y ejercicios 39 class com.slashmobility Activ ity CounterConnection - onServiceConnected(...) - onServiceDisconnected(...) «interface» ServiceConnection + onServiceConnected(...) + onServiceDisconnected(...) «interface» ICounterService + getCounter(): int DualServ ice - binder: ICounterService - onBind(...) «interface» Service  Service-CreateService: cómo crear un Service con la funcionalidad mínima En este ejemplo podemos ver cómo se invoca un servicio utilizando un botón de Start y cómo se para con el botón de Stop.  Service-MusicDemo: cómo utilizar un Service para delegar trabajo que debe ejecutarse en background: Ejemplo de invocación de servicio que ejecuta un audio hasta que finaliza.  Service-binding: cómo interactúa con el Service Ejemplo para interactuar con el Service, mandando o recibiendo información a través de una interfaz genérica.
  • 40. Arquitectura Aplicaciones: Ciclo de vida del Service (según creación) 40
  • 42. Arquitectura de las aplicaciones: Resources 42  Los recursos (Resources) son elementos externos que se quieren incluir y referenciar en la aplicación.  Imágenes, videos, audio, textos, layouts,  Se incluyen declarativamente (/res) acediendose @<tipo>/<nombre>  Programáticamente son accesibles a través de la clase R (compilada con aapt (Android Asset Packaging Tool)) R.resource_tipo.resource_nombre
  • 43. Resources: Tipos de Recursos 43  Cada tipo de recurso en una carpeta /res.  drawable: Imágenes, 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: Tamaño de las fuentes.  anim: Animaciones y efectos.  raw: Recursos rasos (audio, video).  menu: Menús y diálogos.  xml: Resto xml (Preferencias, app widget, …)
  • 44. Resources: Sufijos (Qualifiers) 44  Cada tipo de recurso puede tener su propia configuración según contexto.  Se añade 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)  Version: API (-v1, etc)  …
  • 45. Ejemplos y ejercicios: 8- Resource-Images 45 Resources-Image: en este ejemplo se muestra cómo utilizar recursos tipo imágenes en un linear layout.
  • 46. Ejemplos y ejercicios: 9 – Resources-XML 46  Resources-XML: en este ejemplo se muestra cómo utilizar los recursos de tipo xml, situados en /res/values/words.xml Este ejemplo accede a la información de los ficheros XML (/res/xml/words.xml) y muestra una lista con los datos clickables.
  • 47. Arquitectura de las aplicaciones: Interfaces de usuario (UI) 47  En Android, las interfaces se construyen utilizando los objetos View y ViewGroup  Las Views son el punto de interacción con el usuario (setContentView() en Activity)  Las ViewGroup son una agrupación lógica de elementos visuales (Views)  android.widget = subclases View con funcionalidad
  • 48. Interfaces de usuario: Views 48  Unidad básica 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, …  También gestionan los eventos = interacciones que reciben del usuario:  Cambio de focus, scrolling, clicks, gestos, ...  Se pueden crear por código (programáticamente) o por XML (declarativamente)
  • 49. Interfaces de usuario: Widget 49  Son Views ‘preconstruidas’ que vienen incluidas en la plataforma Android.  ¡NO confundir con App Widget!  Están 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!
  • 50. ¿Cómo Android pinta Views? 50  Cada ViewGroup responsable de pedir a sus hijos que se pinten.  Cada View se pinta a través del método 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, <número exacto>…
  • 51. Interfaces de usuario: Programáticamente 51 public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView myTextView = new TextView(this); myTextView.setText(“Hola Clase”); setContentView(myTextView); } NO recomendable ya que: Creación de vista programática nos acoplamos a los detalles visuales del código. Deberíamos repetir código para L10N, I18N, diferentes tamaños pantalla & pixel, …
  • 52. Interfaces de usuario: Declarativamente - Por XML 52 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 distribución 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 código 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”); }
  • 53. Ejemplos y ejercicios: Views-SimpleViews 53 Ejemplo  Views-SimpleViews: en este ejemplo se puede ver cómo se pueden crear Views, cambiar sus atributos y sobrescribir sus métodos para añadir funcionalidad.  La Activity principal AndroidViews crea a través del menú de la aplicación (pulsando el botón menú del dispositivo) una serie de opciones que invocarán otras Activities que muestran distintas Views (Button, CheckBox, EditText, RadioGroup, Spinner…)
  • 54. Interfaces de usuario: Layouts 54  Su objetivo es controlar la posición de las Views hijas en la pantalla.  Organizados jerárquicamente.  También 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.
  • 55. Interfaces de usuario: Tipos Layouts 55 LinearLayout RelativeLayout AbsoluteLayout  FrameLayout: el más simple, añade cada View hija en la esquina superior izquierda. Cada vez que se añade una, tapa la anterior, diseñado para mostrar un único elemento.  LinearLayout: añade cada View hija en linea recta (horizontal o vertical)  RelativeLayout: añade las Views unas en relación a otras.  TableLayout: añade las Views usando un grid (cuadrícula), a través de filas y columnas. Es similar a las tablas HTML.  AbsoluteLayout: añade las vistas dando coordenadas absolutas.
  • 56. Interfaces de usuario: ViewGroups 56  Objetos ViewGroup que albergan hijos View:  Algunos contienen su propia estructura gráfica (form UI)  Otros son estructuras ‘invisibles’ para gestionar el layout de sus hijos.
  • 57. Interfaces de usuario: Layouts Atributos XML 57  ID: (android:id="@+id/my_button“):  Identificador unívoco del View. Layout Parameters: android:layout_XXX): Son heredables. Varían según el tipo de layout  layout_width, layout_height: wrap_content | fill_parent  layout_position: Expresada en pixels, se recomienda (dp)  size: Tamaño expresado en pares (height, width)  paddings margins.
  • 58. Ejemplos y ejercicios: Layout 58  Layouts-Linear: en este ejemplo se muestra cómo distribuir las vistas de una manera lineal. La Activity principal LinearLayoutDemo muestra cómo se pueden modificar las posiciones de las vistas en tiempo de ejecución. En el archivo main.xml se han creado distintos Layouts. Remarcar la utilización del atributo orientation.  Layouts-Relative: en este ejemplo se muestra cómo distribuir las vistas de una manera relativa entre las Views. Analizar el archivo main.xml, donde se muestra cómo crear tres vistas, relativas unas a otras.  Layouts-Scroll: distribución 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 cómo crear distintas vistas en forma de tabla, similar a HTML.
  • 59. Arquitectura de las aplicaciones: Notificaciones al usuario 59  Una vez añadido View/Widget a nuestro UI, necesitamos conocer como interaccionar/notificar al usuario.  Algunas notificaciones requieren respuesta del usuario, otras no.  Ejemplos: batería baja, confirmación de recepción de un archivo, barras de progreso, etc.  Para cada tipo de notificación se requerirá una manera concreta de informar al usuario: vibración, iluminación LEDs
  • 60. Arquitectura de las aplicaciones: Captura de eventos 60  Definiendo un Event Listener  Sobrescribiendo un Handler de un evento concreto del View.
  • 61. Arquitectura de las aplicaciones: Notificaciones al usuario 61 Toast: Para breves mensajes desde el background Status Bar: Para recordatorios persistentes que requieren del usuario Dialog: Para notificaciones relacionadas con la Activity
  • 62. Ejemplos y ejercicios: Notifications-Demo 62 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 notificación al usuario.
  • 63. Interfaces de usuario: componentes compuestos (I) 63  Normalmente hacen referencia a Views con funcionalidad compleja añadida  Para crear componentes compuestos, se pueden crear Views y añadirle métodos para la gestión de eventos, componentes visuales, etc  Se pueden extender (heredar) componentes de Android por defecto, sobrescribiendo la funcionalidad que se necesite
  • 64. Interfaces de usuario: componentes compuestos (II) 64 TextView EditText con un Button ListView Spinner
  • 65. Interfaces de usuario: componentes compuestos (III) 65 DatePicker TimePicker AutoComplete
  • 66. Interfaces de usuario: AdapterView 66  Son View cuyos hijos están 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
  • 67. Ejemplos y ejercicios: Compound Views 67  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 cómo distribuir elementos de tipo View por la pantalla, utilizando un Adapter que sobrescribe los métodos 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 información, 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.
  • 68. Interfaces de usuario: Menus 68  Proporcionan interfaces amigables que muestran la funcionalidad de nuestra app.  Android facilita la creación de estos menús estandarizándolos.  También se pueden crear a través de XML.  En /res directorio /menu  .xml con <menu> & <item>  MenuInflater.inflate(R.menu.x)  Tres tipos de menús de aplicación.
  • 69. Menus: Options Menu 69  Contiene un máximo de 6 elementos con iconos.  Si se necesitan más, se incluyen en el menú extendido (aparece al pusar el botón + )  El único que no soporta checkbox ni radio-buttons.  La primera vez que se abra, Android llamará al método onCreateOptionsMenu() de la Activity  Cuando el usuario presione una opción del menú, se invocará el método onOptionsItemSelected()
  • 70. Menus: Options Menu (II) 70  Creación de Option Menu vía código: /* 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; }
  • 71. Ejemplos y ejercicios: Menu-OptionMenu 71 Ejemplo  Menu-OptionMenu: en este ejemplo se muestra como crear un Option Menu y interactuar con él.  La Activity principal SimpleShowMenuDemo crea un botón que al presionarlo muestra el Option Menu de la aplicación. Como se ha comentado, este menú también puede ser accedido presionando el botón 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 método onOptionsItemSelected recibirá el evento y podrá utilizar esos identificadores para saber la opción escogida.
  • 72. Menus: Context Menu 72  Conceptualmente similar al botón derecho del ratón en el PC.  Presión sobre la vista unos dos segundos.  Al aparecer, se invocará el método onCreateContextMenu()  Al seleccionar, se invocará el método onContextItemSelected()  Para asociar una View a este menu  registerForContextMenu (View view)
  • 73. Menus: Context Menu (II) 73 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); } }  Creación de Context Menu vía código:
  • 74. Ejemplos y ejercicios: Menu-ContextMenu 74 Ejemplo  Menu-ContextMenu: se muestra de qué manera utilizar los ContextMenu, menús 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 método onCreateContextMenu de la Activity se sobrescribe y se invoca al crear un ContextMenu en la Activity. En este caso, en función de la View (Botón ) seleccionado, se muestra un menú o otro, y al seleccionar una de las opciones se muestra una información por pantalla.
  • 75. Menus: Submenus  Se puede añadir 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 método onOptionsItemSelected() 75
  • 76. Menus: Submenus (II) 76 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; }  Creación de SubMenu vía código:
  • 77. Ejemplos y ejercicios: Menu-SubMenu 77 Ejemplo  Menu-SubMenu: se muestra de qué manera crear Submenus dentro de los OptionMenu.  La Activity principal SimpleShowMenuDemo crea un botón que al presionarlo muestra el Option Menu de la aplicación. Como se ha comentado, este menú también puede ser accedido presionando el botón MENU del dispositivo. En este caso, se puede comprobar como al crear las opciones de menú (método onCreateOptionsMenu) se añaden las opciones de submenú.
  • 78. Arquitectura de las aplicaciones: Seguridad y permisos 78  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 aplicación, que permiten el acceso a un recurso determinado (Red, envío 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>
  • 79. Ejemplos y ejercicios: Seguridad 79 Ejemplo  Aplicación de mail: configurar una cuenta de correo de Android. 1. Ejecutar la aplicación Email del emulador y configurar una cuenta de correo 2. En la ruta /data/data/com.android.email/databases tenemos las bases de datos relacionadas con el correo. 3. Si ejecutamos >sqlite3 database podemos conectarnos con las BD de la aplicación. 4. Al ejecutar >.tables se pueden ver las listas de tablas de la BD. 5. Al ejecutar >select * from messages; se puede ver los mails de usuarios. Esto es una infracción de seguridad, ya que deberían disponer de algún tipo de encriptación.
  • 80. Conclusiones 80 Arquitectura de las aplicaciones  Conocer principales componentes lógicos de una aplicación Android.  Integración & comunicación entre componentes.  Analizar los diferentes tipos de recursos estáticos android.  Identificar los elementos visuales de una aplicación android.  Describir la funcionalidad de los diferentes widget de un GUI.  Conocer las notificaciones, eventos, menús y diálogos del GUI Android.  Establecer políticas de permisos y recursos de seguridad a la hora de desarrollar apps Android. Interfaces GUI [45..75] Componentes Lógicos [6..39] Activities Intents Int. Filters Broadcast Receiver Content Provider Services Views & Widget ViewGroup & Layout Menus Notificaciones & Eventos Compound View & Adapters

Notes de l'éditeur

  1. Tema 4 del curso, que nos llevará aprox 2 días.
  2. Conocer los principales componentes lógicos Analizar los controles graficos disponibles Views, Widget, Layout, Menus, dialogos, …
  3. Fastforwarr cómo se ejecutan las aplicaciones en Android: 1. Escribir en JAVA 2. generar el .class 3. generar el .dex 4. pasar al Runtime el .dex 5. en el Linux se creará un proceso de esa aplicación Se van a explicar los componentes más importantes del framework
  4. Ir comentando poco a poco cada bloque.
  5. Toda app debe tener uno ubicado en la raíz pakage Permite a Android conocer sus componentes y cómo activarlos. Iconos, densidades, screen, sdk, caracteristicas hardware publicidad, CASI TODO SE CONTROLA AQUÍ - Instrumentation: Testing &amp; Profiling Referencias: documentos entregables: REF004 – AndroidManifest
  6. Representa interacción gráfica con el usuario. Un app = 1.apk = Proceso = Conjunto de activity = Tarea (DIBUJAR) VENTANAS + COHESION + MAIN + setContentView + android.app.Activity
  7. Heredamos de Activity Recibimos el Bundle (Contenedor de Objetos) como parámetros Establecemos el contenido de la vista (View) de la Actividad.
  8. Estados principales: Create &amp;gt; Start &amp;gt; Resume &amp;gt; * &amp;gt; Pause &amp;gt; Stop &amp;gt; Destroy * Activa: la actividad está en primer plano y tiene el focus (enfoque de usuario). Se encuentra en lo alto de la pila. * En pausa: la actividad es visible, pero no tiene el focus. Ej: hay un diálogo sobre ella con el focus retenido. * Detenida: La actividad está tapada por otra aplicación. Mantiene sus datos. * Destruida: Una actividad detenida ha sido destruida para liberar memoria y ha perdido sus datos. Hay que recrearla completamente. Las actividades son gestionadas en un pila: foreground = cabeza pila onSaveInstanceState(Bundle) activity event vs SharedPreferences. Cuidado con los cambios de configuración Resources.Configuration tales como orientación.
  9. Cada método sobrescrito se corresponde con una transición de estado.
  10. * Activa: la actividad está en primer plano y tiene el focus (enfoque de usuario). Se encuentra en lo alto de la pila. * En pausa: la actividad es visible, pero no tiene el focus. Ej: hay un diálogo sobre ella con el focus retenido. * Detenida: La actividad está tapada por otra aplicación. Mantiene sus datos. * Destruida: Una actividad detenida ha sido destruida para liberar memoria y ha perdido sus datos. Hay que recrearla completamente.
  11. Son el mecanismo de comunicación entre componentes. Ideal para ‘moverse’ entre activities Acciones Nativa: Intenciones conocidas de hacer algo
  12. Action: Acción/Intención a realizar Data: Datos que me permiten determinar quien lo va a hacer
  13. Con estos datos Android conseguirá ‘afinar’ mas quien debe de hacer la Action
  14. Ejemplo de comunicación entre activities. Mostrar en este ejemplo que el setResult es para comunicar información resultado.
  15. Sólo para Intents implícitos -&amp;gt; Resuelven algo Son instancias de la clase IntentFilter Son conocidos de manera declarativa: &amp;lt;intent Filter&amp;gt; androidmanifest.xml Debe cumplir ACTION + CATEGORY + DATA (mime)
  16. Ver el AndroidManifest.xml de Activities-LaunchDemo Ver el AndroidManifest.xml de BroadcastReceiver-Demo y comentar que se ejecuta la primera Actividad al tener el action y category main. Ver el AndroidManifest.xml de Views-SimpleViews, ver que Android ejecutará una Action de tipo MAIN, con category LAUNCHER. Al haber varias, escoge la primera.
  17. Gestionar los eventos de android y de las apps (incluso que no estén en ejecución) Programática / declarativa No suelen tener UI, lanzan alertas al usuario a través del NotificationManager Registrarlo en Activity.onResume()unregister en Activity.onPause()
  18. Comentar con calma, ir leyendo. Mecanismo que tiene android para difundir eventos. Se construyen de manera declarativa Context.sendBroadcast() Resolución igual que los intent filter normales: ACTION + CATEGORY + DATA
  19. Outcoming: Lanza action de tipo TEST Incoming: BroadcastReceiver que escucha acciones de tipo TEST Androidmanifest.xml: Están declarados tanto Outcoming como Incoming.
  20. Único mecanismo para compartir datos entre app ya que no hay áreas comunes. Los datos pueden estar en Files, SQLite,…, pero son propios de cada app. Si quieres compartir datos o creas contentProvider o públicas en otro. Las apps que quieren datos hablan con el ContentResolver.
  21. Url, Columns, Where, WhereArgument, Order By El cliente (Resolver) accede a traves de managedQuery() El server (Provider) implementa el método Query()
  22. - Comentar las cosas en el AndroidManifest - Comentar que al arrancar la App se invoca el ContentProvider - Comentar que la clase ConstantBrowser interactúa con el Provider - Comentar punto de entrada: Clase ConstantBrowser.onCreate() - Comentar la variable CONTENT_URI - Comentar primera línea de onCreate() constantsCursor=managedQuery(Provider.Constants.CONTENT_URI..) es la que realiza el método query() del provider, que devuelve un apuntador (Cursor) a los contenidos. getContentResolver().insert() getContentResolver().delete(), son los métodos para interactual con el --ContentProvider - Dejar que el asistente interactúe 5 o 10 minutos con la app.
  23. NO UI + Background + Indefinido + BIND TO Reproductor musical Pueden actualizar Content Providers, lanzar Intents, notificaciones... Aplicaciones que no necesitan interacción con el usuario son buenas candidatas a ser servicios. Heredan de la clase android.app.Service y ejemplos = Managers…
  24. DIBUJAR Leer números.
  25. Comentar cómo están especificados los Services en el AndroidManifest.xml * Comentar que el servicio de Music suena aunque salgamos de la app * Ver los estados en el Log.d(..) Dejar 5 o 10 minutos al alumno para que entienda el binder. * Lo importante es entender los miembros binder (Server) y counterservice (Client) del aIDL
  26. Aquello que no sea código. La diferencia con los assest * Son menos comunes que los resources (/res) * Lo incluido en /res es accesible programáticamente (R.resource) ya que es compilado y los assets no. * Los assest mantienen su estructura a pelo (RAW) y para ser accedido debes de utilizar el AssetManager y leer el bytestream. Declarativamente: @&amp;lt;tipo de recurso&amp;gt;/&amp;lt;nombre del recurso&amp;gt;. Para definirlo: @+&amp;lt;tipo de recurso&amp;gt;/&amp;lt;nombre de recurso&amp;gt; Nombre en minúsculas &amp; La extensión se ignora. Mostrar cualquier proyecto la estructura de carpetas.
  27. Cada tipo de recurso va en una carpeta específica
  28. Utilizan sufijos para determinar qué recursos utilizar según contexto (tamaño de pantalla, idioma, orientación, etc.) Mostrar ejemplo en eclipse.
  29. Mirar AndroidManifest.xml Mirar la carpeta recursos /drawable &amp; /string
  30. Mirar AndroidManifest.xml Mirar la carpeta recursos /xml/word.xml
  31. Ojo ViewGroup hereda a nivel programatico de View
  32. Tipicas operaciones con Views 1- Establecer su propiedades 2- Coger el foco para responder a eventos 3- Establecer listener para reaccionar ante esos eventos 4- Ocultarlo o mostrarlo
  33. Subclases View con funcionalidad
  34. Debe de contener un root element. Se pueden crear por XML o por código. Se acceden igual que un recurso normal: R.layout.main_layout
  35. (@) indicates that the XML parser should parse and expand the rest of the ID string (+) means that this is a new resource name that must be created in the R.java file) Consejos para las hacer bien las pantallas 1. Usa wrap_content, fill_parent y dip unit to px in XML layout files 2. Evita AbsoluteLayout 3. No uses hard coded pixel values en tu código. 4. Usa density and/or resolution specific resources.
  36. Forma de poder interactuar y notificarse con el usuario.
  37. Definiendo un Event Listener (onClickListener(..), onKeyListener(..) Sobreescribiendo un evento existente (onTouch..(), onKeyDown(..), onTrackballEvent(…)
  38. *Toast: Pop-up que aparece y desaparece, ideal para mensajes cortos. *Status Bar: Cuando el usuario tiene que realizar una acción. Ideal para notificar cuando un servicio está realizando una acción. Deben ser creadas siempre por servicios. *Dialog: Pequeña ventana que aparece delante de una Actividad. Siempre asociado a una Actividad en su método onCreateDialog(int) Ideal para notificaciones relacionadas con la aplicación (progreso, preguntas, …) Tres tipos: DataPickers (Fecha / Hora), Progress &amp; Alert (de 0..3 botones)
  39. Adapter dice que información quiero y cómo la quiero
  40. * Autocomplete: ArrayAdapter * Grid: Fijarse que en FunnyAdapter * List: ListAdapter con ArrayAdapter * Spinner: ArrayAdapter * DataPicker: No tiene adapter, control normal.
  41. Declarativamente: Un menú está compuesto por &amp;lt;item id=”...” title=”…”&amp;gt; Programáticamente: Menu.add(id, position, title)
  42. Mostrar ejemplo rápido de option, p.e. en la Agenda Unicos que se pueden poner iconos pero no radiobuttons ni checkbox. Añadir iconos: menu.setIcon(R.drawable.menu_quit_icon); El expanded-Menu (para cuando hay más de 6) no se puede incluir iconos Cada vez que el menú se abre se llama a onPrepareOptionsMenu()
  43. Comentar que ese código es de la Activity
  44. Hacer el adb logcat menu.add(0,1,0,&amp;quot;Painting&amp;quot;); primero es el groupId, segundo Id, tercero orden onPrepareOptionsMenu() cierra el menú después de un tiempo.
  45. Ejemplo de pulsar un contacto sobre la agenda Se usa mucho también para los ítems de una ListView. Para registrar una View a un ContextMenu: registerForContextMenu().
  46. registerForContextMenu dice que esas vistas pueden ser “menuables”
  47. Es un submenú otros menus. (options / context) Ideal para típica barra de funcionalidades (Archivo, Editar, ….)
  48. Referencias: documentos entregables: REF006 – Seguridad Mostrar AndroidManifest.xml de BroadcastReceiver-demo Para ver todos los permisos pakage: android.manifest.permission
  49. Slashtest@hotmail.com / formacion1234 Lanzar un emulador (cambio de eclipse?) Con el emulador hay permisos de root