android master class

79
Android Master Class Introducción al desarrollo de aplicaciones en Android

Upload: sergi-martinez

Post on 24-Apr-2015

2.144 views

Category:

Education


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Android master class

Android Master ClassIntroducción al desarrollo de aplicaciones en Android

Page 2: Android master class

Prefacio

Sobre nosotros

Sobre el curso

Sobre Catdroid

Page 3: Android master class

Temario

1. Introducción

2. Eclipse y el SDK

3. Hello World

4. El ciclo de vida

5. Recursos

6. Layouts y Views

7. Interacción con el usuario

8. Menús

9. Preferencias

10. Intents

11. Depuración

12. El Market

Page 4: Android master class

1. Introducción a Android

Page 5: Android master class

Introducción

Smartphones

Android en cifras

Historia de Android

Funcionamento interno

Page 6: Android master class

Smartphones

Teléfono

Rádio

MP3

GPS

Cámera

Internet

Apps

Page 7: Android master class

Android en cifras

#1 en activaciones (350.000 al día)

23% de la cuota de mercado (finales 2010)

250.000+ apps en el market

100+ modelos de teléfono

40+ modelos de tablet

Page 8: Android master class

Android en cifras (cont.)

Mòbils al món, segons Gartner (Abril 2011)

Page 9: Android master class

Android en cifras (cont.)

Page 10: Android master class

¿Qué es Android?

Conjunto de software para dispositivos móviles que incluye:• Sistema operativo• Middleware• Aplicaciones

Open source

Impulsado por Google

Basado en Linux y Java

Page 11: Android master class

Historia

Julio 2005: Google compra Android Inc.

Noviembre 2007: Nace la OHA

Febrero 2009: Release de 1.1

Abril 2009: Release de 1.5 (Cupcake)

Octubre 2009: Release de 2.0 (Eclair)

Deciembre 2010: Release de 2.3 (Gingerbread)

Page 12: Android master class

Versiones

API level• 3 (Cupcake)• 7 (Eclair)• 9 (Gingerbread)

Page 13: Android master class

Características

Sistema base es Linux

Máquina virtual Dalvik

Librerías de sistema• WebKit• SQLite• Media codecs• Comunicaciones (GSM, bluetooth, wifi)• Cámara, GPS, sensores

Application framework

Page 14: Android master class

Arquitectura

Page 15: Android master class

Aplicaciones

Java (.apk)

Se ejecutan en un espacio aislado (instancia de Dalvik)

No hay jerarquía

Se comunican a través de Intents

El market no es imprescindible

Page 16: Android master class

Más información

Web oficial Android• http://www.android.com/• http://developer.android.com/index.html

Wikipedia• http://es.wikipedia.org/wiki/Android

CatDroid• http://catdroid.org/

Page 17: Android master class

2. El entorno de desarrollo

Page 18: Android master class

Elementos necesarios

Eclipse

Android SDK

Eclipse ADT plugin + ADV Manager

Page 19: Android master class

Instalación

1. Preparar el equipo (Instalar Eclipse)

2. Descargar el SDK

3. Instalar el plugin ADT para Eclipse

4. Instalar plataformas y APIs

http://developer.android.com/sdk/installing.html

Page 20: Android master class

Catclipse

Descargar y abrir

Ultimo update: Bolets Barruers

Disponible para Windows y Mac, próximamente para Linux

Page 21: Android master class

3. Hola mundo

Page 22: Android master class

Creación de un nuevo proyecto

Page 23: Android master class

Elementos del proyecto nuevo

Activity

Manifest

Resources

Page 24: Android master class

Activities

Una Activity es una pantalla de la interfaz

Las aplicaciones constan de una o más Activity

Cada Activity es reponsable de guardar su estado

Una Activity se encarga de:• Crear una ventana donde colocar la interfaz • Gestionar la interfaz• Responder a los eventos (onClick, onLongClick, etc).

Page 25: Android master class

Una Activity básica

Page 26: Android master class

Manifest

El Manifest es el archivo donde la aplicación le dice al sistema que elementos requiere para funcionar

Siempre debe llamarse AndroidManifest.xml y estar en la raíz del proyecto

Entre otras cosas contiene:• Atributos de la aplicación y metadatos• La declaración de actividades y otros componentes• Librerías externas• Permisos

Se puede editar via GUI o editando el XML

Page 27: Android master class

Manifest inicial

Page 28: Android master class

Versión de la aplicación

VersionCode es importante para el Market

VersionName es importante para el usuario y/o nosotros

Page 29: Android master class

Definición de la actividad

Definimos las actividades y sus intent-filter

Page 30: Android master class

Versión del SDK

minSdkVersion, maxSdkVersion y targetSdkVersion

Page 31: Android master class

Permisos de la aplicación

Avisan al usuario de las acciones que realizará la aplicación

Listados en: http://developer.android.com/reference/android/Manifest.permission.html

Page 32: Android master class

Recursos

Un recurso es un elemento a utilizar durante la ejecución de la aplicación

Existen diferentes tipos de recursos:• Layouts• Imágenes• Cadenas de texto• Sonidos• Colores• Temas• Animaciones• etc

Page 33: Android master class

Recursos

Se almacenan en la carpeta resources

Cada tipo de recurso tiene va en una carpeta específica

Utilizan sufijos para determinar que recursos utilizar según contexto (tamaño de pantalla, idioma, orientación, etc.)

Nombre en mínusculas

La extensión se ignora (mismo nombre, diferente extensión se considera duplicado)

Page 34: Android master class

La clase R

La clase R es generada y mantenida por el sistema y no debe ser modificada

Contiene un identificador (int) único por cada recurso

Podemos hacer referencia a un recurso en código por R.<tipo>.<nombre>. Ej.: R.layout.main

Page 35: Android master class

Nombrar recursos en XML

Para referirnos a un recurso utilizamos la siguiente sintaxis:

@<tipo de recurso>/<nombre del recurso>

Por ejemplo

@string/app_name

Para definir un nombre utilizamos:

@+<tipo de recurso>/<nombre de recurso>

Page 36: Android master class

Ejemplo

Page 37: Android master class

4. El ciclo de vida

Page 38: Android master class

Estados de una actividad

El sistema gestiona las actividades como una pila

Una 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 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.

Page 39: Android master class

Ciclo de vida de una actividad

Page 40: Android master class

Métodos

Método Descripción Siguiente

onCreate() Donde se crea la interfaz. Se le proporciona un bundle con su estado anterior.

onStart

onRestart() Justo antes de un onStart cuando venimos de onStop onStart

onStart() La actividad se hace visible al usuario onResumeonStop

onResume() La actividad está en primer plano interactuando con el usuario

onPause

onPause La actividad va a ser detenida. Se utiliza para guardar información

onResumeonStop

onStop La actividad ya no es visible al usuario. onRestartonDestroy

onDestroy Última llamada antes de que la actividad sea destruida. El método isFinishing() nos ayuda a saber si es final o temporal

Page 41: Android master class

Otro grafo

Page 42: Android master class

Ejercicio (I)

Clase android.util.Log

Log.<método>(String tag, String message)

Métodos:• e – error• d – debug• i – info• v – verbose• w – warning

private static final String TAG = "MyActivity";Log.v(TAG, "index=" + i);

Page 43: Android master class

Ejercicio(II)

@Override…

protected void onDestroy()

protected void onPause()

protected void onRestart()

protected void onResume()

protected void onStart()

protected void onStop()

Page 44: Android master class

5. Recursos

Page 45: Android master class

Imágenes

Carpeta drawables

Tres tamaños: ldpi, mdpi, hdpi

Tamaño ldpi mdpi hdpi

Relación 0.75 1 1.5

Launcher 36x36 px 48x48 px 72x72 px

Menu 36x36 px 48x48 px 72x72 px

Status Bar (<=2.2) 19x19 px 25x25 px 38x38 px

Status Bar (>=2.3) 12x19 px 16x25 px 24x38 px

Tab 24x24 px 32x32 px 48x48 px

Page 46: Android master class

Iconos

Simplificados

Realísta pero no fotorealista

Imágen frontal

Iluminación superior

Page 47: Android master class

Formatos de imágen

Recomendación:• PNG-24 para imágenes con transparencias• JPG para imágenes sin transparencias

Page 48: Android master class

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>

Page 49: Android master class

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"/>

Page 50: Android master class

Colores

Format: #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>

Page 51: Android master class

Uso de recursos desde código

El objeto R.tipo.id siempre devuelve un entero

Para recuperar el recurso en cuestión utilizamos:

getResources().get<tipo>(Integer id)

O

getResources().getIdentifier(String nombre, String tipo)

Page 52: Android master class

7. Interacción con el usuario

Page 53: Android master class

Eventos

Los layouts generan eventos de tipo onAcción

Los eventos son acciones que interrumpen el flujo del código

Se generan a partir de acciones externas

Para implementar un método onAcción una clase debe implementar la interfaz onAcciónListener

Para adjudicar la clase que implmementa el «escuchador» utilizamos el método setOnAcciónListener de la vista

Page 54: Android master class

Ejemplo con dos clases

public class alHacerClick implements OnClickListener { @Override public void onClick(View v){ v.setText("Click aqui!"); }}...public class Main extends Activity { ... boton.setOnClickListener(new alHacerClick()); ...}

Page 55: Android master class

Ejemplo con la actividad

public class Main extends Activity implements OnClickListener {

@Override public void onClick(View v){ v.setText("Click aqui!"); } ... boton.setOnClickListener(this); ...}

Page 56: Android master class

Múltiples eventos en la misma clase

Si 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

@Overridepublic void onClick(View v){ switch(v) { case R.id.btnOk: … case R.id.btnCancel: … }}

(v.getId()==R.Id.btnOk)

Page 57: Android master class

Un brindis con el usuario

La clase toast permite lanzar mensajes rápidos

Toast.makeText(Context context, int resId, int duration)

Toast makeText(Context context, CharSequence text, int duration)

Duration: Toast. LENGTH_LONG | Toast.LENGTH_SHORT

Page 58: Android master class

Diálogos. setButtons

AlertDialog: puede gestionar entre 0 y 3 respuestasAlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage("Are you sure you want to exit?")       .setCancelable(false)       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {           public void onClick(DialogInterface dialog, int id) {                MyActivity.this.finish();           }       })       .setNegativeButton("No", new DialogInterface.OnClickListener() {           public void onClick(DialogInterface dialog, int id) {                dialog.cancel();           }       });AlertDialog alert = builder.create();

Page 59: Android master class

Diálogos. Una lista.

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setItems(items, new DialogInterface.OnClickListener() {    public void onClick(DialogInterface dialog, int item) {        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();    }});AlertDialog alert = builder.create();

Page 60: Android master class

Diálogos. Checkboxes

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("Pick a color");builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {    public void onClick(DialogInterface dialog, int item) {        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();    }});AlertDialog alert = builder.create();

Page 61: Android master class

Crear un diálogo personalizado

Hemos creado el layout custom_dialogContext mContext = getApplicationContext();Dialog dialog = new Dialog(mContext);

dialog.setContentView(R.layout.custom_dialog);dialog.setTitle("Custom Dialog");

TextView text = (TextView) dialog.findViewById(R.id.text);text.setText("Hello, this is a custom dialog!");ImageView image = (ImageView) dialog.findViewById(R.id.image);image.setImageResource(R.drawable.android);

dialog.show();

Page 62: Android master class

Menús

Page 63: Android master class

Menús. Archivos de menú

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/settings" android:title="@string/settings_label"

android:alphabeticShortcut="@string/settings_shortcut" />

</menu>

Page 64: Android master class

Abrir el menú

Sobrecargamos el método onCreateOptionsMenu

public boolean onCreateOptionsMenu(Menu menu)

Llamamos a GetMenuInflater

MenuInflater inflater = getMenuInflater();

Llamamos al método inflate del MenuInflater

MenuInflater inflater = getMenuInflater();

Page 65: Android master class

Procesar las opciones de menú

Sobrecargamos el método onOptionsItemSelected@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case R.id.settings:

...

}

Page 66: Android master class

9. Preferencias

Page 67: Android master class

Archivos de preferencias

Layout especializado que permite crear pantallas de configuración de forma rápida.<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

<CheckBoxPreference android:key="music"

android:title="@string/music_title" android:summary="@string/music_summary"

android:defaultValue="true" />

<CheckBoxPreference android:key="hints"

android:title="@string/hints_title" android:summary="@string/hints_summary"

android:defaultValue="true"/>

</PreferenceScreen>

Page 68: Android master class

Mostrar archivo de preferencias

public class Prefs extends PreferenceActivity {

protected void onCreate(Bundle savedInstanceState)

{ super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.settings);

}

}

En el manifest:<activity android:name=".Prefs" android:label="@string/settings_title" />

Page 69: Android master class

Leer y escribir preferencias

PreferenceManager.getDefaultSharedPreferences(context)….

getTipo(Nombre, Predeterminado);

setTipo(Nombre, Predeterminado);

Page 70: Android master class

Gestionar opciones@Override

public boolean onPreferenceClick(Preference preference){

if (preference.getKey() == "About"){

Dialog dialog = 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));

}

return false;

}

Page 71: Android master class

10. Intents

Page 72: Android master class

Intents

Android se basa en multitud de pequeños componentes

Estos componentes se comunican via Intents

Mensajes utilizados para notificar a las aplicaciones de eventos• Cambios de Hardware. Ej: tarjeta SD insertada.• Recepción de datos. Ej: llegada de un sms• Eventos de la apliación. Ej: se ha lanzado la aplicación• Etc

Es posible crear nuestros propio intents

Page 73: Android master class

Partes de un Intent

Partes básicas• La acción: una constante que indica la acción que se lanza. Ej.:

VIEW_ACTION, EDIT_ACTION• Los datos: uri indicando el recurso asociado. Ej.:

content://contacts/people/1Partes opcionales

• Una categoría: agrupa el tipo de Intent• Un tipo MIME: indica el tipo de recurso si no concemos una uri• Un 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

Page 74: Android master class

Ejemplos de Intent

ANSWER_ACTION

CALL_ACTION

DELETE_ACTION

DIAL_ACTION

EDIT_ACTION

FACTORY_TEST_ACTION

GET_CONTENT_ACTION

INSERT_ACTION

MAIN_ACTION: Inicio de aplicación

PICK_ACTION: permitir a otras apps elegir contenido de la tuya

VIEW_CONTENT: para ver contenido

EDIT_CONTENT: para editar contenido

Page 75: Android master class

Categorias de Intent

ALTERNATIVE_CATEGORY

BROWSABLE_CATEGORY

DEFAULT_CATEGORY

GADGET_CATEGORY

HOME_CATEGORY

LAUNCHER_CATEGORY

PREFERENCE_CATEGORY

SELECTED_ALTERNATIVE_CATEGORY

TAB_CATEGORY

TEST_CATEGORY

Page 76: Android master class

Llegando a la actividad adecuada

Una actividad debe cumplir tres reglas para responder un Intent• La actividad debe soportar la acción especificada• La actividad debe soportar el tipo MIME si lo hay• La actividad debe soportar TODAS las categorias nombradas en el

Intent

Uso de Intent-Filter en el manifest

Page 77: Android master class

Ejemplo

Page 78: Android master class

Iniciar otra Activity

Uso del método startActivity(Intent) o startActivityForResult (Intent, int)

Podemos pasar parametros con Intent.putExtra(int, <type>)

Recibirlos con getIntent().getExtras().get<Type>(clave);

Page 79: Android master class

Devolver valores de una Activity

Establecemos el valor a devolver con setResult(int resultCode) o setResult (int resultCode, Intent data)

La actividad «llamadora» implementa el método onActivityResult(int requestCode, int resultCode, Intent data)

resultCode puede ser uno de estos valores:• RESULT_CANCELED• RESULT_OK• RESULT_FIRST_USER