SlideShare una empresa de Scribd logo
Android Master ClassIntroducción al desarrollo de aplicaciones en Android
PrefacioSobrenosotrosSobre el cursoSobreCatdroid
TemarioIntroducciónEclipse y el SDKHello WorldEl ciclo de vidaRecursosLayouts y ViewsInteracción con el usuarioMenúsPreferenciasIntentsDepuraciónEl Market
1. Introducción a Android
IntroducciónSmartphonesAndroid en cifrasHistoria de AndroidFuncionamento interno
SmartphonesTeléfonoRádioMP3GPSCámeraInternetApps
Android en cifras#1 en activaciones (350.000 al día)23% de la cuota de mercado (finales 2010)250.000+ apps en el market100+ modelos de teléfono40+ modelos de tablet
Android en cifras (cont.)Mòbils al món, segons Gartner (Abril 2011)
Android en cifras (cont.)
¿Qué es Android?Conjunto de software para dispositivos móviles que incluye:Sistema operativoMiddlewareAplicacionesOpen sourceImpulsado por GoogleBasado en Linux y Java
HistoriaJulio 2005: Google compra Android Inc.Noviembre 2007: Nace la OHAFebrero 2009: Release de 1.1Abril 2009: Release de 1.5 (Cupcake)Octubre 2009: Release de 2.0 (Eclair)Deciembre 2010: Release de 2.3 (Gingerbread)
VersionesAPI level3 (Cupcake)7 (Eclair)9 (Gingerbread)
CaracterísticasSistema base es LinuxMáquina virtual DalvikLibrerías de sistemaWebKitSQLiteMedia codecsComunicaciones (GSM, bluetooth, wifi)Cámara, GPS, sensoresApplicationframework
Arquitectura
AplicacionesJava (.apk)Se ejecutan en un espacio aislado (instancia de Dalvik)No hay jerarquíaSe comunican a través de IntentsEl market no es imprescindible
Más informaciónWeb oficial Androidhttp://www.android.com/http://developer.android.com/index.htmlWikipediahttp://es.wikipedia.org/wiki/AndroidCatDroidhttp://catdroid.org/
2. El entorno de desarrollo
ElementosnecesariosEclipseAndroid SDKEclipse ADT plugin + ADV Manager
InstalaciónPreparar el equipo (Instalar Eclipse)Descargar el SDKInstalar el plugin ADT para EclipseInstalarplataformas y APIshttp://developer.android.com/sdk/installing.html
CatclipseDescargar y abrirUltimo update: BoletsBarruersDisponiblepara Windows y Mac, próximamentepara Linux
3. Holamundo
Creación de un nuevoproyecto
Elementos del proyectonuevoActivityManifestResources
ActivitiesUna Activity es una pantalla de la interfazLas aplicaciones constan de una o más ActivityCada Activity es reponsable de guardar su estadoUna Activity se encarga de:Crear una ventana donde colocar la interfaz Gestionar la interfazResponder a los eventos (onClick, onLongClick, etc).
Una Activity básica
ManifestEl Manifest es el archivo donde la aplicación le dice al sistema que elementos requiere para funcionarSiempre debe llamarse AndroidManifest.xml y estar en la raíz del proyectoEntre otras cosas contiene:Atributos de la aplicación y metadatosLa declaración de actividades y otros componentesLibrerías externasPermisosSe puede editar via GUI o editando el XML
Manifest inicial
Versión de la aplicaciónVersionCode es importante para el MarketVersionName es importante para el usuario y/o nosotros
Definición de la actividadDefinimos las actividades y sus intent-filter
Versión del SDKminSdkVersion, maxSdkVersion y targetSdkVersion
Permisos de la aplicaciónAvisan al usuario de las acciones que realizará la aplicaciónListados en: http://developer.android.com/reference/android/Manifest.permission.html
RecursosUn recurso es un elemento a utilizar durante la ejecución de la aplicaciónExisten diferentes tipos de recursos:LayoutsImágenesCadenas de textoSonidosColoresTemasAnimacionesetc
RecursosSe almacenan en la carpeta resourcesCada tipo de recurso tiene va en una carpeta específicaUtilizan sufijos para determinar que recursos utilizar según contexto (tamaño de pantalla, idioma, orientación, etc.)Nombre en mínusculasLa extensión se ignora (mismo nombre, diferente extensión se considera duplicado)
La clase RLa clase R es generada y mantenida por el sistema y no debe ser modificadaContiene un identificador (int) único por cada recurso Podemos hacer referencia a un recurso en código por R.<tipo>.<nombre>. Ej.: R.layout.main
Nombrar recursos en XMLPara referirnos a un recurso utilizamos la siguiente sintaxis:@<tipo de recurso>/<nombre del recurso>Por ejemplo@string/app_namePara definir un nombre utilizamos:@+<tipo de recurso>/<nombre de recurso>
Ejemplo
4. El ciclo de vida
Estados de una actividadEl sistema gestiona las actividades como una pilaUna actividad tiene cuatro estados: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 focusretenido.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.
Ciclo de vida de una actividad
Métodos
Otrografo
Ejercicio (I)Claseandroid.util.LogLog.<método>(String tag, String message)Métodos:e – errord – debugi – infov – verbosew – warningprivatestaticfinalString TAG ="MyActivity";Log.v(TAG,"index="+ i);
Ejercicio(II)@Override…protectedvoidonDestroy()protectedvoidonPause() protectedvoidonRestart()protectedvoidonResume() protectedvoidonStart()protectedvoidonStop()
5. Recursos
ImágenesCarpetadrawablesTrestamaños: ldpi, mdpi, hdpi
IconosSimplificadosRealístapero no fotorealistaImágen frontalIluminación superior
Formatos de imágenRecomendación:PNG-24 paraimágenes con transparenciasJPG paraimágenes sin transparencias
Archivos de cadenas<?xml version="1.0" encoding="utf-8"?><resources><string name="resource name1">cadena</string><string name="resource name2">cadena</string><string name="resource name3">cadena</string>….</resources>
Arrays de cadenas<?xml version="1.0" encoding="utf-8"?><resources>    <string-array name="SearchTimeFrameArray">        <item>@string/SearchTimeFrameAll</item>        <item>@string/SearchTimeFrame24h</item>        <item>@string/SearchTimeFrame48h</item>        <item>@string/SearchTimeFrameWeek</item>…<Spinner android:entries="@array/SearchTimeFrameArray"  android:prompt="@string/SearchTimeFrame" android:id="@+id/SearchTime"/>
ColoresFormat: #rgb | #rrggbb | #rrggbbaa<?xml version="1.0" encoding="utf-8"?><resources>    <color name="background">#FFF</color>    <color name="text">#000</color>    <color name="hbackground">#eb5200</color>    <color name="htext">#fff</color>    <color name="dimtext">#444</color></resources>
Uso de recursosdesdecódigoEl objeto R.tipo.idsiempredevuelve un enteroPara recuperar el recurso en cuestiónutilizamos:getResources().get<tipo>(Integer id)OgetResources().getIdentifier(String nombre, String tipo)
7. Interacción con el usuario
EventosLos layouts generan eventos de tipo onAcciónLos eventos son acciones que interrumpen el flujo del códigoSe generan a partir de acciones externasPara implementar un método onAcción una clase debe implementar la interfaz onAcciónListenerPara adjudicar la clase que implmementa el «escuchador» utilizamos el método setOnAcciónListener de la vista
Ejemplo con dos clasespublicclassalHacerClickimplementsOnClickListener{    @OverridepublicvoidonClick(View v){v.setText("Clickaqui!");    }}...publicclassMainextendsActivity {    ...boton.setOnClickListener(new alHacerClick());    ...}
Ejemplo con la actividadpublicclassMainextendsActivityimplementsOnClickListener{    @OverridepublicvoidonClick(View v){v.setText("Clickaqui!");}...boton.setOnClickListener(this);    ...}
Múltiples eventos en la misma claseSi tenemos a nuestra clase escuchando más de un evento OnClick, el parametro v nos permite averiguar que view ha disparado el evento. Podemos comparar v.getId() con un recurso R.id @OverridepublicvoidonClick(View v){switch(v) {         case R.id.btnOk:             …         case R.id.btnCancel:…   }}(v.getId()==R.Id.btnOk)
Un brindis con el usuarioLa clase toast permite lanzar mensajes rápidosToast.makeText(Context context, intresId, intduration)ToastmakeText(Context context, CharSequence text, intduration)Duration: Toast. LENGTH_LONG | Toast.LENGTH_SHORT
Diálogos. setButtonsAlertDialog: puede gestionar entre 0 y 3 respuestasAlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setMessage("Are yousureyouwanttoexit?")       .setCancelable(false)       .setPositiveButton("Yes",newDialogInterface.OnClickListener(){           publicvoidonClick(DialogInterfacedialog,int id){                MyActivity.this.finish();           }       })       .setNegativeButton("No",newDialogInterface.OnClickListener(){           publicvoidonClick(DialogInterfacedialog,int id){                dialog.cancel();           }       });AlertDialogalert=builder.create();
Diálogos. Una lista.finalCharSequence[]items={"Red","Green","Blue"};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setItems(items,newDialogInterface.OnClickListener(){    publicvoidonClick(DialogInterfacedialog,intitem){        Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();    }});AlertDialogalert=builder.create();
Diálogos. CheckboxesfinalCharSequence[]items={"Red","Green","Blue"};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setSingleChoiceItems(items,-1,newDialogInterface.OnClickListener(){    publicvoidonClick(DialogInterfacedialog,intitem){        Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();    }});AlertDialogalert=builder.create();
Crear un diálogo personalizadoHemos creado el layoutcustom_dialogContextmContext=getApplicationContext();Dialogdialog=newDialog(mContext);dialog.setContentView(R.layout.custom_dialog);dialog.setTitle("CustomDialog");TextViewtext=(TextView)dialog.findViewById(R.id.text);text.setText("Hello, thisis a customdialog!");ImageViewimage=(ImageView)dialog.findViewById(R.id.image);image.setImageResource(R.drawable.android);dialog.show();
Menús
Menús. Archivos de menú<?xmlversion="1.0" encoding="utf-8"?><menuxmlns:android="http://schemas.android.com/apk/res/android">…<itemandroid:id="@+id/settings" android:title="@string/settings_label"android:alphabeticShortcut="@string/settings_shortcut" />…</menu>
Abrir el menúSobrecargamos el método onCreateOptionsMenupublicbooleanonCreateOptionsMenu(Menumenu)Llamamos a GetMenuInflaterMenuInflaterinflater = getMenuInflater();Llamamos al método inflate del MenuInflaterMenuInflaterinflater = getMenuInflater();
Procesar las opciones de menúSobrecargamos el método onOptionsItemSelected@OverridepublicbooleanonOptionsItemSelected(MenuItemitem) {switch(item.getItemId()) {        case R.id.settings:        ...}
9. Preferencias
Archivos de preferenciasLayoutespecializado que permite crear pantallas de configuración de forma rápida.<?xml version="1.0" encoding="utf-8"?><PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"><CheckBoxPreferenceandroid:key="music"android:title="@string/music_title" android:summary="@string/music_summary"android:defaultValue="true" /><CheckBoxPreferenceandroid:key="hints"android:title="@string/hints_title" android:summary="@string/hints_summary"android:defaultValue="true"/></PreferenceScreen>
Mostrar archivo de preferenciaspublic class Prefs extends PreferenceActivity {protectedvoidonCreate(BundlesavedInstanceState)    {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.settings);    }}En el manifest:<activityandroid:name=".Prefs" android:label="@string/settings_title" />
Leer y escribir preferenciasPreferenceManager.getDefaultSharedPreferences(context)….getTipo(Nombre, Predeterminado);setTipo(Nombre, Predeterminado);
Gestionar opciones@OverridepublicbooleanonPreferenceClick(Preferencepreference){if(preference.getKey() == "About"){Dialogdialog = new Dialog(this);dialog.setContentView(R.layout.about);dialog.setTitle(getResources().getString(R.string.OptionAbout));dialog.setCancelable(true);dialog.show();    }if(preference.getKey() == "DoLogin"){findPreference("User").setEnabled(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false));indPreference("Password").setEnabled(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false));    }returnfalse;}
10. Intents
IntentsAndroid se basa en multitud de pequeños componentesEstos componentes se comunican viaIntentsMensajes utilizados para notificar a las aplicaciones de eventosCambios de Hardware. Ej: tarjeta SD insertada.Recepción de datos. Ej: llegada de un smsEventos de la apliación. Ej: se ha lanzado la aplicaciónEtcEs posible crear nuestros propio intents
Partes de un IntentPartes básicasLa acción: una constante que indica la acción que se lanza. Ej.: VIEW_ACTION, EDIT_ACTIONLos datos: uri indicando el recurso asociado. Ej.: content://contacts/people/1Partes opcionalesUna categoría: agrupa el tipo de IntentUn tipo MIME: indica el tipo de recurso si no concemos una uriUn componente: la clase que debe tener el receptor. Obvia las otras propiedades, pero es más frágil.Extras: un Bundle con información extra que el receptor va a necesitar
Ejemplos de IntentANSWER_ACTIONCALL_ACTIONDELETE_ACTIONDIAL_ACTIONEDIT_ACTIONFACTORY_TEST_ACTIONGET_CONTENT_ACTIONINSERT_ACTIONMAIN_ACTION: Inicio de aplicaciónPICK_ACTION: permitir a otras apps elegir contenido de la tuyaVIEW_CONTENT: para ver contenidoEDIT_CONTENT: para editar contenido
Categorias de IntentALTERNATIVE_CATEGORYBROWSABLE_CATEGORYDEFAULT_CATEGORYGADGET_CATEGORYHOME_CATEGORYLAUNCHER_CATEGORYPREFERENCE_CATEGORYSELECTED_ALTERNATIVE_CATEGORYTAB_CATEGORYTEST_CATEGORY
Llegando a la actividad adecuadaUna actividad debe cumplir tres reglas para responder un IntentLa actividad debe soportar la acción especificadaLa actividad debe soportar el tipo MIME si lo hayLa actividad debe soportar TODAS las categorias nombradas en el IntentUso de Intent-Filter en el manifest
Ejemplo
Iniciar otra ActivityUso del método startActivity(Intent) o startActivityForResult (Intent, int)Podemos pasar parametros con Intent.putExtra(int, <type>)Recibirlos con getIntent().getExtras().get<Type>(clave);
Devolver valores de una ActivityEstablecemos el valor a devolver con setResult(intresultCode) o setResult (intresultCode, Intent data)La actividad «llamadora» implementa el método onActivityResult(intrequestCode, intresultCode, Intent data)resultCode puede ser uno de estos valores:RESULT_CANCELEDRESULT_OKRESULT_FIRST_USER

Más contenido relacionado

PDF
Programación Orientada a Eventos Java
PPT
Componentes en-poo
PDF
Swin01
PPTX
Programacion orientada a objetos Java
DOCX
Programacion orientada a objetos
DOCX
Clase swing
PDF
Practica retro java 28102013
PDF
U.T. 3.- Programación Orientada a Objetos. Programación JAVA
Programación Orientada a Eventos Java
Componentes en-poo
Swin01
Programacion orientada a objetos Java
Programacion orientada a objetos
Clase swing
Practica retro java 28102013
U.T. 3.- Programación Orientada a Objetos. Programación JAVA

Destacado (8)

PPTX
Realm or: How I learned to stop worrying and love my app database
PPTX
Introducción a mobclix
PPTX
Admob y yo
PDF
My way to clean android (EN) - Android day salamanca edition
PPTX
It's the arts! Playing around with the Android canvas
PDF
[Android] 2D Graphics
PPTX
Android data binding
PPT
Introduction to Android Fragments
Realm or: How I learned to stop worrying and love my app database
Introducción a mobclix
Admob y yo
My way to clean android (EN) - Android day salamanca edition
It's the arts! Playing around with the Android canvas
[Android] 2D Graphics
Android data binding
Introduction to Android Fragments
Publicidad

Similar a Android master class (20)

PPT
Introduccion a Android
PPTX
Píldoras android i. Intro - 2ª parte
PPT
Intro. a Android Instituto Bosc de la Coma en Olot
PPTX
CLASE 4 android cat 32 pags para estudiantes.pptx
PDF
Deletreando Android
PPTX
Iniciación a Android
PPT
Píldora 1: Android intro
PDF
Curso Android Tema 2
PDF
Preguntas de android
PDF
Preguntas de android
PPT
Curso Desarrollo Android
PPTX
Programacion Orientada a Eventos
PDF
Preguntas sobre android
PPT
Flex Camp 2008. Ricardo Poblete
PDF
Preguntas sobre android
PDF
Android bootcamp 101 v2.0
PPT
Curso de programacion en android
PDF
Maestrosdelweb guia-android
PDF
Maestrosdelweb guia-android
PDF
Mdw guia-android
Introduccion a Android
Píldoras android i. Intro - 2ª parte
Intro. a Android Instituto Bosc de la Coma en Olot
CLASE 4 android cat 32 pags para estudiantes.pptx
Deletreando Android
Iniciación a Android
Píldora 1: Android intro
Curso Android Tema 2
Preguntas de android
Preguntas de android
Curso Desarrollo Android
Programacion Orientada a Eventos
Preguntas sobre android
Flex Camp 2008. Ricardo Poblete
Preguntas sobre android
Android bootcamp 101 v2.0
Curso de programacion en android
Maestrosdelweb guia-android
Maestrosdelweb guia-android
Mdw guia-android
Publicidad

Más de Sergi Martínez (7)

PDF
Kotlin, a modern language for modern times
PDF
What is flutter and why should i care?
PDF
What is flutter and why should i care? Lightning talk
PDF
Let’s talk about star wars with Dialog Flow
PDF
Database handling with room
PPT
Smartphones
PPTX
Creating multillingual apps for android
Kotlin, a modern language for modern times
What is flutter and why should i care?
What is flutter and why should i care? Lightning talk
Let’s talk about star wars with Dialog Flow
Database handling with room
Smartphones
Creating multillingual apps for android

Último (20)

PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Escuelas Desarmando una mirada subjetiva a la educación
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
DOCX
V UNIDAD - SEGUNDO GRADO. del mes de agosto
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
biología es un libro sobre casi todo el tema de biología
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PPTX
caso clínico iam clinica y semiología l3.pptx
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
Metodologías Activas con herramientas IAG
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
OK OK UNIDAD DE APRENDIZAJE 5TO Y 6TO CORRESPONDIENTE AL MES DE AGOSTO 2025.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Escuelas Desarmando una mirada subjetiva a la educación
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
V UNIDAD - SEGUNDO GRADO. del mes de agosto
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
biología es un libro sobre casi todo el tema de biología
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
Fundamentos_Educacion_a_Distancia_ABC.pdf
Escuela Sabática 6. A través del Mar Rojo.pdf
caso clínico iam clinica y semiología l3.pptx
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
Metodologías Activas con herramientas IAG
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx

Android master class

  • 1. Android Master ClassIntroducción al desarrollo de aplicaciones en Android
  • 3. TemarioIntroducciónEclipse y el SDKHello WorldEl ciclo de vidaRecursosLayouts y ViewsInteracción con el usuarioMenúsPreferenciasIntentsDepuraciónEl Market
  • 5. IntroducciónSmartphonesAndroid en cifrasHistoria de AndroidFuncionamento interno
  • 7. Android en cifras#1 en activaciones (350.000 al día)23% de la cuota de mercado (finales 2010)250.000+ apps en el market100+ modelos de teléfono40+ modelos de tablet
  • 8. Android en cifras (cont.)Mòbils al món, segons Gartner (Abril 2011)
  • 10. ¿Qué es Android?Conjunto de software para dispositivos móviles que incluye:Sistema operativoMiddlewareAplicacionesOpen sourceImpulsado por GoogleBasado en Linux y Java
  • 11. HistoriaJulio 2005: Google compra Android Inc.Noviembre 2007: Nace la OHAFebrero 2009: Release de 1.1Abril 2009: Release de 1.5 (Cupcake)Octubre 2009: Release de 2.0 (Eclair)Deciembre 2010: Release de 2.3 (Gingerbread)
  • 12. VersionesAPI level3 (Cupcake)7 (Eclair)9 (Gingerbread)
  • 13. CaracterísticasSistema base es LinuxMáquina virtual DalvikLibrerías de sistemaWebKitSQLiteMedia codecsComunicaciones (GSM, bluetooth, wifi)Cámara, GPS, sensoresApplicationframework
  • 15. AplicacionesJava (.apk)Se ejecutan en un espacio aislado (instancia de Dalvik)No hay jerarquíaSe comunican a través de IntentsEl market no es imprescindible
  • 16. Más informaciónWeb oficial Androidhttp://www.android.com/http://developer.android.com/index.htmlWikipediahttp://es.wikipedia.org/wiki/AndroidCatDroidhttp://catdroid.org/
  • 17. 2. El entorno de desarrollo
  • 19. InstalaciónPreparar el equipo (Instalar Eclipse)Descargar el SDKInstalar el plugin ADT para EclipseInstalarplataformas y APIshttp://developer.android.com/sdk/installing.html
  • 20. CatclipseDescargar y abrirUltimo update: BoletsBarruersDisponiblepara Windows y Mac, próximamentepara Linux
  • 22. Creación de un nuevoproyecto
  • 24. ActivitiesUna Activity es una pantalla de la interfazLas aplicaciones constan de una o más ActivityCada Activity es reponsable de guardar su estadoUna Activity se encarga de:Crear una ventana donde colocar la interfaz Gestionar la interfazResponder a los eventos (onClick, onLongClick, etc).
  • 26. ManifestEl Manifest es el archivo donde la aplicación le dice al sistema que elementos requiere para funcionarSiempre debe llamarse AndroidManifest.xml y estar en la raíz del proyectoEntre otras cosas contiene:Atributos de la aplicación y metadatosLa declaración de actividades y otros componentesLibrerías externasPermisosSe puede editar via GUI o editando el XML
  • 28. Versión de la aplicaciónVersionCode es importante para el MarketVersionName es importante para el usuario y/o nosotros
  • 29. Definición de la actividadDefinimos las actividades y sus intent-filter
  • 30. Versión del SDKminSdkVersion, maxSdkVersion y targetSdkVersion
  • 31. Permisos de la aplicaciónAvisan al usuario de las acciones que realizará la aplicaciónListados en: http://developer.android.com/reference/android/Manifest.permission.html
  • 32. RecursosUn recurso es un elemento a utilizar durante la ejecución de la aplicaciónExisten diferentes tipos de recursos:LayoutsImágenesCadenas de textoSonidosColoresTemasAnimacionesetc
  • 33. RecursosSe almacenan en la carpeta resourcesCada tipo de recurso tiene va en una carpeta específicaUtilizan sufijos para determinar que recursos utilizar según contexto (tamaño de pantalla, idioma, orientación, etc.)Nombre en mínusculasLa extensión se ignora (mismo nombre, diferente extensión se considera duplicado)
  • 34. La clase RLa clase R es generada y mantenida por el sistema y no debe ser modificadaContiene un identificador (int) único por cada recurso Podemos hacer referencia a un recurso en código por R.<tipo>.<nombre>. Ej.: R.layout.main
  • 35. Nombrar recursos en XMLPara referirnos a un recurso utilizamos la siguiente sintaxis:@<tipo de recurso>/<nombre del recurso>Por ejemplo@string/app_namePara definir un nombre utilizamos:@+<tipo de recurso>/<nombre de recurso>
  • 37. 4. El ciclo de vida
  • 38. Estados de una actividadEl sistema gestiona las actividades como una pilaUna actividad tiene cuatro estados: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 focusretenido.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.
  • 39. Ciclo de vida de una actividad
  • 42. Ejercicio (I)Claseandroid.util.LogLog.<método>(String tag, String message)Métodos:e – errord – debugi – infov – verbosew – warningprivatestaticfinalString TAG ="MyActivity";Log.v(TAG,"index="+ i);
  • 47. Formatos de imágenRecomendación:PNG-24 paraimágenes con transparenciasJPG paraimágenes sin transparencias
  • 48. Archivos de cadenas<?xml version="1.0" encoding="utf-8"?><resources><string name="resource name1">cadena</string><string name="resource name2">cadena</string><string name="resource name3">cadena</string>….</resources>
  • 49. Arrays de cadenas<?xml version="1.0" encoding="utf-8"?><resources> <string-array name="SearchTimeFrameArray"> <item>@string/SearchTimeFrameAll</item> <item>@string/SearchTimeFrame24h</item> <item>@string/SearchTimeFrame48h</item> <item>@string/SearchTimeFrameWeek</item>…<Spinner android:entries="@array/SearchTimeFrameArray" android:prompt="@string/SearchTimeFrame" android:id="@+id/SearchTime"/>
  • 50. ColoresFormat: #rgb | #rrggbb | #rrggbbaa<?xml version="1.0" encoding="utf-8"?><resources> <color name="background">#FFF</color> <color name="text">#000</color> <color name="hbackground">#eb5200</color> <color name="htext">#fff</color> <color name="dimtext">#444</color></resources>
  • 51. Uso de recursosdesdecódigoEl objeto R.tipo.idsiempredevuelve un enteroPara recuperar el recurso en cuestiónutilizamos:getResources().get<tipo>(Integer id)OgetResources().getIdentifier(String nombre, String tipo)
  • 52. 7. Interacción con el usuario
  • 53. EventosLos layouts generan eventos de tipo onAcciónLos eventos son acciones que interrumpen el flujo del códigoSe generan a partir de acciones externasPara implementar un método onAcción una clase debe implementar la interfaz onAcciónListenerPara adjudicar la clase que implmementa el «escuchador» utilizamos el método setOnAcciónListener de la vista
  • 54. Ejemplo con dos clasespublicclassalHacerClickimplementsOnClickListener{ @OverridepublicvoidonClick(View v){v.setText("Clickaqui!"); }}...publicclassMainextendsActivity { ...boton.setOnClickListener(new alHacerClick()); ...}
  • 55. Ejemplo con la actividadpublicclassMainextendsActivityimplementsOnClickListener{ @OverridepublicvoidonClick(View v){v.setText("Clickaqui!");}...boton.setOnClickListener(this); ...}
  • 56. Múltiples eventos en la misma claseSi tenemos a nuestra clase escuchando más de un evento OnClick, el parametro v nos permite averiguar que view ha disparado el evento. Podemos comparar v.getId() con un recurso R.id @OverridepublicvoidonClick(View v){switch(v) { case R.id.btnOk: … case R.id.btnCancel:… }}(v.getId()==R.Id.btnOk)
  • 57. Un brindis con el usuarioLa clase toast permite lanzar mensajes rápidosToast.makeText(Context context, intresId, intduration)ToastmakeText(Context context, CharSequence text, intduration)Duration: Toast. LENGTH_LONG | Toast.LENGTH_SHORT
  • 58. Diálogos. setButtonsAlertDialog: puede gestionar entre 0 y 3 respuestasAlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setMessage("Are yousureyouwanttoexit?")       .setCancelable(false)       .setPositiveButton("Yes",newDialogInterface.OnClickListener(){           publicvoidonClick(DialogInterfacedialog,int id){                MyActivity.this.finish();           }       })       .setNegativeButton("No",newDialogInterface.OnClickListener(){           publicvoidonClick(DialogInterfacedialog,int id){                dialog.cancel();           }       });AlertDialogalert=builder.create();
  • 59. Diálogos. Una lista.finalCharSequence[]items={"Red","Green","Blue"};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setItems(items,newDialogInterface.OnClickListener(){    publicvoidonClick(DialogInterfacedialog,intitem){        Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();    }});AlertDialogalert=builder.create();
  • 60. Diálogos. CheckboxesfinalCharSequence[]items={"Red","Green","Blue"};AlertDialog.Builderbuilder=newAlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setSingleChoiceItems(items,-1,newDialogInterface.OnClickListener(){    publicvoidonClick(DialogInterfacedialog,intitem){        Toast.makeText(getApplicationContext(),items[item],Toast.LENGTH_SHORT).show();    }});AlertDialogalert=builder.create();
  • 61. Crear un diálogo personalizadoHemos creado el layoutcustom_dialogContextmContext=getApplicationContext();Dialogdialog=newDialog(mContext);dialog.setContentView(R.layout.custom_dialog);dialog.setTitle("CustomDialog");TextViewtext=(TextView)dialog.findViewById(R.id.text);text.setText("Hello, thisis a customdialog!");ImageViewimage=(ImageView)dialog.findViewById(R.id.image);image.setImageResource(R.drawable.android);dialog.show();
  • 63. Menús. Archivos de menú<?xmlversion="1.0" encoding="utf-8"?><menuxmlns:android="http://schemas.android.com/apk/res/android">…<itemandroid:id="@+id/settings" android:title="@string/settings_label"android:alphabeticShortcut="@string/settings_shortcut" />…</menu>
  • 64. Abrir el menúSobrecargamos el método onCreateOptionsMenupublicbooleanonCreateOptionsMenu(Menumenu)Llamamos a GetMenuInflaterMenuInflaterinflater = getMenuInflater();Llamamos al método inflate del MenuInflaterMenuInflaterinflater = getMenuInflater();
  • 65. Procesar las opciones de menúSobrecargamos el método onOptionsItemSelected@OverridepublicbooleanonOptionsItemSelected(MenuItemitem) {switch(item.getItemId()) { case R.id.settings: ...}
  • 67. Archivos de preferenciasLayoutespecializado que permite crear pantallas de configuración de forma rápida.<?xml version="1.0" encoding="utf-8"?><PreferenceScreenxmlns:android="http://schemas.android.com/apk/res/android"><CheckBoxPreferenceandroid:key="music"android:title="@string/music_title" android:summary="@string/music_summary"android:defaultValue="true" /><CheckBoxPreferenceandroid:key="hints"android:title="@string/hints_title" android:summary="@string/hints_summary"android:defaultValue="true"/></PreferenceScreen>
  • 68. Mostrar archivo de preferenciaspublic class Prefs extends PreferenceActivity {protectedvoidonCreate(BundlesavedInstanceState) {super.onCreate(savedInstanceState);addPreferencesFromResource(R.xml.settings); }}En el manifest:<activityandroid:name=".Prefs" android:label="@string/settings_title" />
  • 69. Leer y escribir preferenciasPreferenceManager.getDefaultSharedPreferences(context)….getTipo(Nombre, Predeterminado);setTipo(Nombre, Predeterminado);
  • 70. Gestionar opciones@OverridepublicbooleanonPreferenceClick(Preferencepreference){if(preference.getKey() == "About"){Dialogdialog = new Dialog(this);dialog.setContentView(R.layout.about);dialog.setTitle(getResources().getString(R.string.OptionAbout));dialog.setCancelable(true);dialog.show(); }if(preference.getKey() == "DoLogin"){findPreference("User").setEnabled(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false));indPreference("Password").setEnabled(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("DoLogin", false)); }returnfalse;}
  • 72. IntentsAndroid se basa en multitud de pequeños componentesEstos componentes se comunican viaIntentsMensajes utilizados para notificar a las aplicaciones de eventosCambios de Hardware. Ej: tarjeta SD insertada.Recepción de datos. Ej: llegada de un smsEventos de la apliación. Ej: se ha lanzado la aplicaciónEtcEs posible crear nuestros propio intents
  • 73. Partes de un IntentPartes básicasLa acción: una constante que indica la acción que se lanza. Ej.: VIEW_ACTION, EDIT_ACTIONLos datos: uri indicando el recurso asociado. Ej.: content://contacts/people/1Partes opcionalesUna categoría: agrupa el tipo de IntentUn tipo MIME: indica el tipo de recurso si no concemos una uriUn componente: la clase que debe tener el receptor. Obvia las otras propiedades, pero es más frágil.Extras: un Bundle con información extra que el receptor va a necesitar
  • 74. Ejemplos de IntentANSWER_ACTIONCALL_ACTIONDELETE_ACTIONDIAL_ACTIONEDIT_ACTIONFACTORY_TEST_ACTIONGET_CONTENT_ACTIONINSERT_ACTIONMAIN_ACTION: Inicio de aplicaciónPICK_ACTION: permitir a otras apps elegir contenido de la tuyaVIEW_CONTENT: para ver contenidoEDIT_CONTENT: para editar contenido
  • 76. Llegando a la actividad adecuadaUna actividad debe cumplir tres reglas para responder un IntentLa actividad debe soportar la acción especificadaLa actividad debe soportar el tipo MIME si lo hayLa actividad debe soportar TODAS las categorias nombradas en el IntentUso de Intent-Filter en el manifest
  • 78. Iniciar otra ActivityUso del método startActivity(Intent) o startActivityForResult (Intent, int)Podemos pasar parametros con Intent.putExtra(int, <type>)Recibirlos con getIntent().getExtras().get<Type>(clave);
  • 79. Devolver valores de una ActivityEstablecemos el valor a devolver con setResult(intresultCode) o setResult (intresultCode, Intent data)La actividad «llamadora» implementa el método onActivityResult(intrequestCode, intresultCode, Intent data)resultCode puede ser uno de estos valores:RESULT_CANCELEDRESULT_OKRESULT_FIRST_USER