manual para android

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

Upload: carolina-candia

Post on 22-Mar-2016

243 views

Category:

Documents


2 download

DESCRIPTION

Este manual es una guía rápida para el aprendizaje de la herramienta.

TRANSCRIPT

Page 1: Manual para Android

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

Page 2: Manual para Android

Prefacio

Sobre nosotros

Sobre el curso

Sobre Catdroid

Page 3: Manual para Android

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: Manual para Android

1. Introducción a Android

Page 5: Manual para Android

Introducción

Smartphones

Android en cifras

Historia de Android

Funcionamento interno

Page 6: Manual para Android

Smartphones

Teléfono

Rádio

MP3

GPS

Cámera

Internet

Apps

Page 7: Manual para Android

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: Manual para Android

Android en cifras (cont.)

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

Page 9: Manual para Android

Android en cifras (cont.)

Page 10: Manual para Android

¿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: Manual para Android

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: Manual para Android

Versiones

API level

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

Page 13: Manual para Android

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: Manual para Android

Arquitectura

Page 15: Manual para Android

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: Manual para Android

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: Manual para Android

2. El entorno de desarrollo

Page 18: Manual para Android

Elementos necesarios

Eclipse

Android SDK

Eclipse ADT plugin + ADV Manager

Page 19: Manual para Android

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: Manual para Android

Catclipse

Descargar y abrir

Ultimo update: Bolets Barruers

Disponible para Windows y Mac, próximamente para Linux

Page 21: Manual para Android

3. Hola mundo

Page 22: Manual para Android

Creación de un nuevo proyecto

Page 23: Manual para Android

Elementos del proyecto nuevo

Activity

Manifest

Resources

Page 24: Manual para Android

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: Manual para Android

Una Activity básica

Page 26: Manual para Android

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: Manual para Android

Manifest inicial

Page 28: Manual para Android

Versión de la aplicación

VersionCode es importante para el Market

VersionName es importante para el usuario y/o nosotros

Page 29: Manual para Android

Definición de la actividad

Definimos las actividades y sus intent-filter

Page 30: Manual para Android

Versión del SDK

minSdkVersion, maxSdkVersion y targetSdkVersion

Page 31: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

Ejemplo

Page 37: Manual para Android

4. El ciclo de vida

Page 38: Manual para Android

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: Manual para Android

Ciclo de vida de una actividad

Page 40: Manual para Android

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 onResume

onStop 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

onResume onStop

onStop La actividad ya no es visible al usuario. onRestart onDestroy

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: Manual para Android

Otro grafo

Page 42: Manual para Android

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: Manual para Android

Ejercicio(II)

@Override…

protected void onDestroy()

protected void onPause()

protected void onRestart()

protected void onResume()

protected void onStart()

protected void onStop()

Page 44: Manual para Android

5. Recursos

Page 45: Manual para Android

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: Manual para Android

Iconos

Simplificados

Realísta pero no fotorealista

Imágen frontal

Iluminación superior

Page 47: Manual para Android

Formatos de imágen

Recomendación:

• PNG-24 para imágenes con transparencias • JPG para imágenes sin transparencias

Page 48: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

7. Interacción con el usuario

Page 53: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

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 @Override public void onClick(View v){ switch(v) { case R.id.btnOk: … case R.id.btnCancel: … } }

Page 57: Manual para Android

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: Manual para Android

Diálogos. setButtons

AlertDialog: puede gestionar entre 0 y 3 respuestas AlertDialog.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: Manual para Android

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: Manual para Android

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: Manual para Android

Crear un diálogo personalizado

Hemos creado el layout custom_dialog Context 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: Manual para Android

Menús

Page 63: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

9. Preferencias

Page 67: Manual para Android

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: Manual para Android

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: Manual para Android

Leer y escribir preferencias

PreferenceManager.getDefaultSharedPreferences(context)….

getTipo(Nombre, Predeterminado);

setTipo(Nombre, Predeterminado);

Page 70: Manual para Android

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: Manual para Android

10. Intents

Page 72: Manual para Android

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: Manual para Android

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/1 Partes 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: Manual para Android

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: Manual para Android

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: Manual para Android

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: Manual para Android

Ejemplo

Page 78: Manual para Android

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: Manual para Android

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