Desarrollo Android
-
Upload
sav3ferris -
Category
Documents
-
view
77 -
download
5
Transcript of Desarrollo Android
![Page 1: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/1.jpg)
Desarrollo de aplicacionesmóviles en Android
Desarrollo de aplicacionesmóviles en Android
1
![Page 2: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/2.jpg)
Índice
Historia¿Qué es Android?Arquitectura del sistemasistemaEntorno de desarrollo
Arquitectura de las
aplicaciones
Almacenamiento de
2
Almacenamiento de datosMultimediaPráctica final
![Page 3: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/3.jpg)
Objetivos
Arquitectura de las
aplicaciones� Conocer principales componentes
lógicos de una aplicación Android.
� Integración & comunicación entre � 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.
3
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.
![Page 4: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/4.jpg)
Arquitectura de las aplicaciones: Componentes de aplicación
� Principales componentes para el desarrollo de aplicaciones en Android:
4
![Page 5: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/5.jpg)
Arquitectura de las aplicaciones: Componentes de aplicación
Interfaces GUI [45..75]
Componentes Lógicos [6..39]
Seg
uridad
& P
erm
isos
[76..77]
Rec
urs
os
[40..44]
Views & Widget ViewGroup & Layout
Menus
Notificaciones & Eventos
Compound View & Adapters
5
Componentes Lógicos [6..39]
Seg
uridad
& P
erm
isos
Rec
urs
os
Activities Intents Int. Filters
BroadcastReceiver
Content Provider Services
![Page 6: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/6.jpg)
Arquitectura Aplicaciones: AndroidManifest.xml
� Describe los componentes de la aplicación.
� Se declaran permisos y librerías necesarias para librerías necesarias para ejecutar la aplicación.
� Icono, min SDK, Metadatos<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="prueba.Android"
android:versionCode="1"android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloWord"
6
<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>
![Page 7: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/7.jpg)
Arquitectura de las aplicaciones: Componente Activity
�Son las ventanas con las que interactúa el �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 variasActivity, una de ellas marcada como principal.
7
Activity, una de ellas marcada como principal.� Establecen el contenido visual con:
setContentView(…)
� Heredan de la clase android.app.Activity
![Page 8: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/8.jpg)
Arquitectura de las aplicaciones: Componente Activity II
package com.slashmobility.curso.android;
import android.app.Activity;
import android.os.Bundle;
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
8
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
![Page 9: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/9.jpg)
Ciclo de vida de la Activity
� Cambio configuración-> Destruye Actividad
� ANR si la Activity no responde a un evento
Estados de la Activity
responde a un evento en 5 segundos o
� Utilizar handlers para evitar ANR
Mensaje ANR
9
Mensaje ANR
![Page 10: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/10.jpg)
Ciclo de vida de la Activitypublic class HelloWorld extends
Activity {
@Override
protected void onCreate(BundlesavedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
Estados de la Activity
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
10
![Page 11: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/11.jpg)
Ciclo de vida de la Activity
11
![Page 12: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/12.jpg)
Ejemplos y ejercicios: Activities-LifeCycle
�Crear un proyecto Activities-LifeCycle
� Este proyecto debe
mostrar un mensaje en la mostrar un mensaje en la
salida de Log
(System.out) cada vez
que la Activity realice
una transición entre
estados.
12
estados.
![Page 13: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/13.jpg)
Intents: Definición
� Mecanismo para el paso de mensajes, declara � Mecanismo para el paso de mensajes, declara la intención de realizar una acción.
� Utilizados para iniciar Activities o comunicarlasentre ellas.
� Útiles para desacoplar componentes (no necesitan conocer implementaciones).
13
necesitan conocer implementaciones).� Existen acciones nativas que pueden ser
lanzadas con los Intents (crean las Actividades para realizar esas acciones).
![Page 14: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/14.jpg)
Intents: Estructura
� 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. � 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
14
� ACTION_DIAL: tel://687123456
� ACTION_DIAL: content://contacts/people/2
![Page 15: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/15.jpg)
Intents: Atributos adicionales
� Atributos adicionales:
� Category: ofrece información adicional sobre el tipo de componente que debe recoger el Intent.
Type� 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 una instancia de esa clase, si no Android buscará el componente que mejor considere.
� Extras: información adicional (pares key-value).
15
![Page 16: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/16.jpg)
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_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.
16
![Page 17: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/17.jpg)
Intents: Uso en Activities
� Lanzar una actividad
� Context.startActivity(Intent)
� Activity.startActivityForResult(Intent)
Uri uri = Uri.parse("http://www.google.com");
Intent intent = new
Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
17
startActivity(intent);
![Page 18: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/18.jpg)
Ejemplos y ejercicios: Activities-LaunchDemo
Ejemplo
�Proyecto Launch: cómo realizar una petición a Android para realizar Android para realizar algún tipo de acción.
� En este ejemplo podemos
ver cómo se invoca una
Activity para abrir una
18
Activity para abrir una
página Web.
![Page 19: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/19.jpg)
Intents: Explícitos o Implicitos
� En los Intents, se puede especificar el destinatario o no:
� Explícitos: Si se establece un destinatario (vía
setComponent(ComponentName) o 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
19
� Android utiliza los Intent-filters para buscar el mejor candidato
![Page 20: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/20.jpg)
Intents: Ejemplos comunicación Activities� Iniciar actividad para recoger los contactos
Uri uri = Uri.parse(“content://contacts/people”);
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(intent, PICK_CONTACT_SUBACTIVITY);
...
public void onActivityResult(int requestCode, int resultCode, 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);
20
result.putExtra(IS_INPUT_CORRECT, inputCorrect);
if(TODO_OK)
setResult(RESULT_OK, result);
else
setResult(RESULT_CANCELED, null);
finish();
![Page 21: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/21.jpg)
Ejemplos y ejercicios: Intent-LaunchClassEjemplo
� Intent-LaunchClass: cómo se puede invocar a una Activitydesde 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
Activity anterior.
![Page 22: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/22.jpg)
Arquitectura aplicaciones: Intent filters
�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> �Se registra declarativamente en <intent-filter> AndroidManifest.xml
�Tres elementos fundamentales para la resolución:�action: nombre de la acción que puede
realizar
22
realizar�data: tipo MIME, no es obligatorio�category: especifica bajo que circunstancias
la acción puede ser ejecutada
![Page 23: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/23.jpg)
Arquitectura de las aplicaciones: Intent filters
Intent
23
Intent
![Page 24: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/24.jpg)
Ejemplo: Intent Filter
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="prueba.Android"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"<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" />
24
<uses-sdk android:minSdkVersion="7" />
</manifest>
![Page 25: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/25.jpg)
Arquitectura de las aplicaciones: Broadcast Receiver
� Utilizados para recibir y actuar ante eventos/mensajes en forma de Intents que genera Android o las apps.
import android.content.BroadcastReceiver;
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
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.
}
}
![Page 26: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/26.jpg)
BroadcastReceivers - Usos
� 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
26
� 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
![Page 27: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/27.jpg)
Arquitectura Aplicaciones: Broadcast & Intents� Los Intents tienen la capacidad de enviar mensajes estructurados
� Los Intents Broadcast se utilizan para notificar oyentes de acciones determinadas o eventos
� Android utiliza Broadcast Intents para difundir eventos de sistema (bateria baja, llamada entrante...)
Lanzamiento de Broadcast Intent
(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
Intent intent = new Intent(NEW_INTENT);
intent.putExtra(“param1”, value1);
intent.putExtra(“param2”, value2);
intent.putExtra(“param3”, value3);
sendBroadcast(intent);
Lanzamiento de Broadcast Intent
![Page 28: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/28.jpg)
Arquitectura de las aplicaciones: Broadcast Intents
Intent
28
Intents
![Page 29: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/29.jpg)
Ejemplos y ejercicios: BroadcastReceiver-Demo
Ejemplo
� BroadcastReceiver-Demo: cómocrear filtros para que un BroadcastReceiver pueda recibir un Intent y procesarlo según necesite. Intent y procesarlo según necesite.
� En este ejemplo podemos ver cómola Activity principal crea un Intent y lo envía modo broadcast (multidifusión). Los componentes“oyentes” ,en este caso un BroadcastReceiver llamadoIncomingReceiver detectará eseevento y mostrará un mensaje por
29
evento y mostrará un mensaje porla salida estándar (en este casoel fichero de log, al que se puedeacceder vía adb logcat)
![Page 30: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/30.jpg)
Arquitectura de las aplicaciones: Content Provider
� Único mecanismo para compartir datos entre aplicaciones.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.
30
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.
![Page 31: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/31.jpg)
Arquitectura Aplicaciones: Proveedores nativos Android
� Browser: permite leer o modificar bookmarks, historial del navegador o búsquedas web.
� CallLog: permite ver o modificar el historial de
� MediaStore: acceso a los recursos multimedia del dispositivo (audio, video...)modificar el historial de
llamadas (entrantes o salientes).
� Contacts: Recupera, modifica, o almacena detalles de contactos.
video...)
� Settings: acceso a las preferencias del dispositivo
31
![Page 32: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/32.jpg)
Arquitectura Aplicaciones: Interfaz de un contentProvider� Interfaz a implementar del Content Provider
32
![Page 33: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/33.jpg)
Arquitectura Aplicaciones: Content Providers - consultas
� Tres piezas para construir una consulta� URI del content provider.
� Los nombres de los campos a recibir (Projections)
� El tipo de datos de dichos campos
Dos métodos mismos parámetros� Dos métodos mismos parámetros� ContentResolver.query(…) : Cursor
� Activity.managedquery(…): Cursor
Ejemplo Acceso a la agenda de Contactos
33
![Page 34: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/34.jpg)
Arquitectura Aplicaciones: Content Providers - modificaciones
� 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,
Insert:newValues.put(COLUMN_NAME, newValue);
Uri myRowUri =
getContentResolver().insert(MyProvider.CONTENT_URI,
newValues);
34
getContentResolver().update(MyProvider.CONTENT_URI,
newValues, where, null);
Delete:
getContentResolver().delete(myRowUri, null, null);
![Page 35: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/35.jpg)
Ejemplos y ejercicios: ContentProvider-Queries
Ejemplo
� ContentProvider-Contacts: cómo consultarel Provider de la agenda de contactos.
� En este ejemplo podemos ver cómo hacer un listado de los contactos que tenemos en la agenda. listado de los contactos que tenemos en la agenda.
� ContentProvider-CallLog: cómo consultar el Provider de la lista de llamadas.
� En este ejemplo podemos ver cómo hacer un listado del registro de la duración de las llamadas del nuestro dispositivomóvil.
� ContentProvider-CreatingContact: cómo
35
� ContentProvider-CreatingContact: cómorealizar la inserción de un contacto
� En este ejemplo podemos ver cómo insertaun nuevo contacto programaticamente.
![Page 36: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/36.jpg)
Ejemplos y ejercicios: ContentProvider-QueriesEjemplo
� ContentProvider-Queries: cómo crear un ContentProvider queproporcione contenidosproporcione contenidospredefinidos, creandométodos par a la consulta y actualización de los contenidosdel ContentProvider.
� En este ejemplo podemos vercómo crear un ContentProvider, listar una
36
ContentProvider, listar unalista de datos introducidospor defecto en el proveedor, y añadir nuevas entradas.
![Page 37: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/37.jpg)
Arquitectura de las aplicaciones: Componente Service
� No tienen UI y de ejecutan en el background de � 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
37
� Heredan de android.app.Service� Location Manager, Media Controller, Notification
Manager son ejemplos de Services.
![Page 38: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/38.jpg)
Arquitectura Aplicaciones: Services: creación de servicios
Ejemplo de creación de un servicio:
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {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;
}
38
}
Actualizar archivo manifest:
<service android:enabled=”true”
android:name=”.MyService”></service>
![Page 39: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/39.jpg)
Servicios & Comunicación & Intents
� Ejemplos de uso de intents en servicios:
� Context.startService(Intent) para iniciar un servicio.
� Context.stopService(Intent): Detiene un servicio
� StopSelf(): El servicio se detiene el mismo
� Bind:
� Comunicación síncrona.
� Clase android.os.Binder
39
� Método
public IBinder
onBind(Intent intent)
![Page 40: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/40.jpg)
Arquitectura Aplicaciones: Services - control de los servicios
Para iniciar un servicio:
startService(new Intent(MyService.MY_ACTION));
Para parar un servicio iniciado:
ComponentName service = startService(new Intent(this, 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.
40
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.
![Page 41: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/41.jpg)
Ejemplos y ejercicios
�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 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:
41
trabajo que debe ejecutarse en background:
Ejemplo de invocación de servicio que
ejecuta un audio hasta que
finaliza.
![Page 42: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/42.jpg)
Ejemplos y ejercicios� Service-basicBinding: cómo interactúarcon un Service Local
Ejemplo para interactúar localmente con un
Service del que se conoce su implementación en
la clase.
Service-binding: cómo interactúa con el
class com.slashmobility
«interface»ServiceConnection
+ onServiceConnected(...)+ onServiceDisconnected(...)
«interface»Service
� 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.
42
Activ ity CounterConnection
- onServiceConnected(...)- onServiceDisconnected(...)
«interface»ICounterService
+ getCounter(): int
DualServ ice
- binder: ICounterService- onBind(...)
![Page 43: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/43.jpg)
Arquitectura Aplicaciones: Ciclo de vida del Service (según creación)
43
![Page 44: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/44.jpg)
Arquitectura Aplicaciones: Resumen de componentes
44
![Page 45: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/45.jpg)
Arquitectura de las aplicaciones: Resources
� Los recursos (Resources) son � 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
45
� Programáticamente son accesibles a través de la clase R (compilada con aapt (Android Asset Packaging Tool)) R.resource_tipo.resource_nombre
![Page 46: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/46.jpg)
Resources: Tipos de Recursos� Cada tipo de recurso en una carpeta
/res.� drawable: Imágenes, Iconos, …
� layout: Layout para organizar views.
values:� 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.
46
� menu: Menús y diálogos.
� xml: Resto xml (Preferencias, app widget, …)
![Page 47: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/47.jpg)
Resources: Sufijos (Qualifiers)� Cada tipo de recurso puede tener su
propia configuración según contexto.� Se añade un sufijo /tiporecurso-xxx
� L10N & I18NL10N & I18N
� Language: (-es, -en, -de, …)
� Country Code: (-123)
� Region: (-ca, -us, …)
� Pantallas
� Orientation: (-land, -port & -square)
� Pixel density: (-hdpi, -mdpi & -ldpi)
47
� Pixel density: (-hdpi, -mdpi & -ldpi)
� Navigation: (D-pad, trackball & wheel)
� Size: (small, normal & large)
� Version: API (-v1, etc) � …
![Page 48: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/48.jpg)
Ejemplos y ejercicios: Resource-Images
�Resources-Image: en este ejemplo se muestra cómo utilizar recursos tipo imágenes en un linear layout. layout.
48
![Page 49: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/49.jpg)
Ejemplos y ejercicios: Resources
�Resources-Multilanguage: en este ejemplo se muestracómo utilizar la internacionalización
Este ejemplo se muestra cómo al Este ejemplo se muestra cómo al cambiar el idioma se puede utilizar una fuente de datos distinta.
�Resources-ChangeConfig: en este ejemplo se muestracómo Android detecta los cambios de configuración
49
cambios de configuración
Se puede ver como cambian las imágenes según idioma y orientación del dispositivo.
![Page 50: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/50.jpg)
Ejemplos y ejercicios: Resources-XML� Resources-XML: en esteejemplo se muestra cómoutilizar los recursos de tipoxml, 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.
50
![Page 51: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/51.jpg)
Arquitectura de las aplicaciones: Interfaces de usuario (UI)
� En Android, las interfaces se construyen utilizando los objetos View y ViewGrouputilizando 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
51
![Page 52: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/52.jpg)
Interfaces de usuario: Views� 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.pantalla.
� Son responsable de dibujarse:� Sus medidas, layout, como se pintan, …
� También gestionan los eventos = interacciones que reciben del usuario:
52
reciben del usuario:� Cambio de focus, scrolling, clicks, gestos, ...
� Se pueden crear por código (programáticamente)o por XML (declarativamente)
![Page 53: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/53.jpg)
Interfaces de usuario: Widget� Son Views ‘preconstruidas’ que vienen incluidas
en la plataforma Android.� ¡NO confundir con App Widget!� Están incluidos en el paquete android.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.
53
� 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!
![Page 54: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/54.jpg)
¿Cómo Android pinta Views? � 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:� 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
54
comunican con dos clase� View.MeasureSpec : UNSPECIFIED, EXACTLY & AT_MOST.
� ViewGroup.LayoutParams : FILL_PARENT, WRAP_CONTENT, <número exacto>…
![Page 55: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/55.jpg)
Interfaces de usuario: Programáticamente
� NO recomendable ya que:� Creación de vista programática nos
acoplamos a los detalles visuales del código.
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView myTextView = new TextView(this);
código.� Deberíamos repetir código para L10N,
I18N, diferentes tamaños pantalla & pixel, …
55
TextView myTextView = new TextView(this);
myTextView.setText(“Hola Clase”);
setContentView(myTextView);}
![Page 56: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/56.jpg)
Interfaces de usuario: Declarativamente - Por XML
En el archivo /res/layout/main.xml:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"> <!-- crea un layout con
la distribución de los elementos visuales -->
<TextView android:id="@+id/myTestView"<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
56
setContentView(R.layout.main); //recurso main.xml
TextView myTextView =
(TextView)findViewById(R.id.myTextView);
myTextView.setText(“Hola clase”);
}
![Page 57: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/57.jpg)
Ejemplos y ejercicios: Views-SimpleViews
Ejemplo
� Views-SimpleViews: en esteejemplo se puede ver cómose pueden crear Views, cambiar sus atributos y cambiar sus atributos y sobrescribir sus métodospara 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
57
invocarán otras Activities que muestran distintas Views(Button, CheckBox, EditText, RadioGroup, Spinner…)
![Page 58: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/58.jpg)
Interfaces de usuario: Layouts
� Su objetivo es controlar la posición de las Views hijas en la pantalla.
� Organizados jerárquicamente.� Organizados jerárquicamente.� También conocidos como
Layout Managers.� Son extensiones de ViewGroup� Se pueden anidar, es decir,
incluir Layouts dentro de
58
incluir Layouts dentro de Layouts
� Android proporciona una serie de Layouts por defecto.
![Page 59: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/59.jpg)
Interfaces de usuario: Tipos Layouts� 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)
LinearLayout RelativeLayout AbsoluteLayout
� 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.
59
![Page 60: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/60.jpg)
Interfaces de usuario: ViewGroups� 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.
60
![Page 61: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/61.jpg)
Interfaces de usuario: Layouts Atributos XML
� 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
61
� layout_position: Expresada en pixels, se recomienda (dp)
� size: Tamaño expresado en pares (height, width)
� paddings margins.
![Page 62: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/62.jpg)
Ejemplos y ejercicios: Layout� 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. 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
62
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.
![Page 63: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/63.jpg)
Arquitectura de las aplicaciones: Notificaciones al usuario
� 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
63
� Para cada tipo de notificación se requerirá una manera concreta de informar al usuario: vibración, iluminación LEDs
![Page 64: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/64.jpg)
Arquitectura de las aplicaciones: Captura de eventos
� Definiendo un Event Listener
� Sobrescribiendo un Handler de un evento concreto del View.
64
evento concreto del View.
![Page 65: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/65.jpg)
Arquitectura de las aplicaciones: Notificaciones al usuario
Toast: Para breves mensajesdesde el background
Status Bar: Para recordatorios persistentes
que requieren del usuario
Dialog:Para notificaciones relacionadas
con la Activity
65
con la Activity
![Page 66: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/66.jpg)
Ejemplos y ejercicios: Notifications-Demo
Ejemplo� Notifications-Demo: en este ejemplo se muestra algunos de los distintosmuestra algunos de los distintosmecanismos paramostrarnotificaciones
� La Activity principal muestra una serie de botones que invocan
66
botones que invocan distintos eventos de notificación al usuario.
![Page 67: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/67.jpg)
Interfaces de usuario: componentes compuestos (I)
� Normalmente hacen referencia a Views con funcionalidad compleja añadida
� Para crear componentes � 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
67
componentes de Android por defecto, sobrescribiendo la funcionalidad que se necesite
![Page 68: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/68.jpg)
Interfaces de usuario: componentes compuestos (II)
TextView ListView Spinner
EditText con un Button
68
![Page 69: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/69.jpg)
Interfaces de usuario: componentes compuestos (III)
DatePicker TimePicker AutoComplete
69
![Page 70: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/70.jpg)
Interfaces de usuario: AdapterView
� Son View cuyos hijos están determinados por un Adapter.
� Encargados de rellenar datos (binding) y gestionar selecciones (binding) y gestionar selecciones de usuario (handling).
� Útiles cuando queremos mostrar visualmente datos almacenados
View Button, ImageButton, EditText, …
70
AdapterView
Adapter
Datos
ListView, GridView, Spinner, Gallery, ..
CursorAdapter, ListAdapter, SpinnerAdapter,
Content Provider, Cursor, String {}, File, URI
![Page 71: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/71.jpg)
Ejemplos y ejercicios: Compound Views� Compound-Autocomplete: en este ejemplo se muestra como
tener un campo donde Android da sugerencias de posibles palabras a rellenar.
La Activity principal muestra un campo de Autocomplete, con un Adapter que hace de puente entre el campo y las posibles sugerencias.
� Compound-Grid: en este ejemplo se una lista de Viewsdistribuidas en forma de grid en la pantalladistribuidas 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
71
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 horaSe crea una Actividad que muestra los controles para modificar fecha y hora.
![Page 72: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/72.jpg)
Interfaces de usuario: Menus� Proporcionan interfaces
amigables que muestran la funcionalidad de nuestra app.
� Android facilita la creación de estos menús estos menús estandarizándolos.
� También se pueden crear a través de XML.
� En /res directorio /menu
� .xml con <menu> & <item>
72
.xml con <menu> & <item>
� MenuInflater.inflate(R.menu.x)
� Tres tipos de menús de aplicación.
![Page 73: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/73.jpg)
Menus: Options Menu
� 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 + )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
73
onCreateOptionsMenu() de la Activity
� Cuando el usuario presione una opción del menú, se invocará el método onOptionsItemSelected()
![Page 74: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/74.jpg)
Menus: Options Menu (II)
� 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;return true;
}
/* Handles item selections */
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_NEW_GAME:
newGame();
return true;
case MENU_QUIT:
quit();
74
quit();
return true;
}
return false;}
![Page 75: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/75.jpg)
Ejemplos y ejercicios: Menu-OptionMenu
Ejemplo
� Menu-OptionMenu: en este ejemplose muestra como crear un Option Menu y interactuar con él.
� La Activity principal � La Activity principal SimpleShowMenuDemo crea un botón que al presionarlo muestra el OptionMenu 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
75
elementos textuales a los que se les asigna una serie de identificadores. Al seleccionar uno de los elementos del menú, el método onOptionsItemSelectedrecibirá el evento y podrá utilizar esos identificadores para saber la opción escogida.
![Page 76: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/76.jpg)
Menus: Context Menu
� Conceptualmente similar al botón derecho del ratón en el PC.
� Presión sobre la vista unos dos � Presión sobre la vista unos dos segundos.
� Al aparecer, se invocará el método onCreateContextMenu()
� Al seleccionar, se invocará el método onContextItemSelected()
76
método onContextItemSelected()
� Para asociar una View a este menu� registerForContextMenu (View view)
![Page 77: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/77.jpg)
Menus: Context Menu (II)
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");
� Creación de Context Menu vía código:
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:
77
case DELETE_ID:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
![Page 78: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/78.jpg)
Ejemplos y ejercicios: Menu-ContextMenu
Ejemplo
� Menu-ContextMenu: se muestrade qué manera utilizar los ContextMenu, menúsdependientes de las vistas sobre las que se presiona. 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
78
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.
![Page 79: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/79.jpg)
Menus: Submenus
� Se puede añadir dentro de cualquier menú, excepto en otro submenú.otro submenú.
� Ideal para categorizar funcionalidades de nuestra app.� Igual que en los Option Menu, al pulsar de invocará el
método onOptionsItemSelected()
79
![Page 80: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/80.jpg)
Menus: Submenus (II)
public boolean onCreateOptionsMenu(Menu menu) {boolean result = super.onCreateOptionsMenu(menu);
SubMenu fileMenu = menu.addSubMenu("File");SubMenu editMenu = menu.addSubMenu("Edit");
� Creación de SubMenu vía código:
SubMenu editMenu = menu.addSubMenu("Edit");fileMenu.add("new");fileMenu.add("open");fileMenu.add("save");editMenu.add("undo");editMenu.add("redo");
return result;}
80
![Page 81: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/81.jpg)
Ejemplos y ejercicios: Menu-SubMenu
Ejemplo
� Menu-SubMenu: se muestra de qué manera crear Submenus dentro de los OptionMenu.
� La Activity principal � La Activity principal SimpleShowMenuDemo crea un botón que al presionarlo muestra el OptionMenu 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ú
81
como al crear las opciones de menú (método onCreateOptionsMenu) se añaden las opciones de submenú.
![Page 82: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/82.jpg)
Arquitectura de las aplicaciones: Seguridad y permisos
� Seguridad basada en el Kernel de Linux, cada paquete tiene un único userID y procesos en sandbox, por lo que no pueden ser afectados entre sí
� Los permisos son un mecanismo a nivel de aplicación, que permiten el acceso a un recurso determinado (Red, envío de SMS..)SMS..)
� Se pueden crear en AndroidManifest.xml
<permissionandroid:name=”com.paad.DETONATE_DEVICE”android:protectionLevel=”dangerous”android:label=”Self Destruct”android:description=”@string/detonate_description”></permission>
82
Y se pueden asignar en el tag activity:<activityandroid:name=”.MyActivity”android:label=”@string/app_name”android:permission=”com.paad.DETONATE_DEVICE”></activity>
![Page 83: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/83.jpg)
Ejemplos y ejercicios: SeguridadEjemplo
� Aplicación de mail: configurar una cuenta de correo de Android.
1. Ejecutar la aplicación Email del emulador y configurar una cuenta de correo2. 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 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.
83
![Page 84: Desarrollo Android](https://reader034.fdocuments.ec/reader034/viewer/2022042516/55cf9915550346d0339b70f4/html5/thumbnails/84.jpg)
Conclusiones
Arquitectura de las
aplicaciones� Conocer principales componentes
lógicos de una aplicación Android.
� Integración & comunicación entre
Interfaces GUI [45..75]
[76..77]
Views & Widget
ViewGroup& Layout
Notificaciones & Eventos� 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.
Componentes Lógicos [6..39]
Seg
uridad
& P
erm
isos
[76..77]
Rec
urs
os
[40..44]
Activities Intents
Menus
Notificaciones & Eventos
Compound View & Adapters
84
� 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.
Seg
uridad
& P
erm
isos
Int. Filters BroadcastReceiver
Content Provider Services