49
Android Bootcamp 101: Mi primera Aplicación Android Leo Fishman [email protected] Buenos Aires GTUG

ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Embed Size (px)

DESCRIPTION

Este “Bootcamp” es la primera de una serie de capacitaciones que se dictarán en varios lugares y contextos. Durante este “Bootcamp” se verán las bases para crear aplicaciones Android usando eclipse + ADT (Android Development Tools). Durante el curso cubriremos:Descripción básica de sistemas Android y sus principales beneficios para usuarios, desarrolladores y empresas. Instalación y configuración del ambiente de desarrollo. Creación de una aplicación. Emulador y deploy en dispositivos android. Conceptos básicos sobre arquitectura y ciclos de vida de aplicaciones Android. Layouts e Intents.

Citation preview

Page 1: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Android Bootcamp 101:Mi primera Aplicación Android

Leo [email protected]

Buenos Aires GTUG

Page 2: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Descarga de Archivos

Por favor, copie la carpeta BOOTCAMP a su escritorio (o para donde prefiera)

Page 3: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

¿Que es Android?

Page 4: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Componentes de una aplicación

Activities Representa una Pantalla con UI Son independientes entre ellas

Se pueden referenciar Activities de otras aplicaciones (vía Intent) Extienden de la clase Activity

Services Corren en el background

Para porcesos complejos o para servir a llamadas remotas No proveen UI

Extienden de la clase Service

Content Providers Comparten un conjunto de información de la aplicación Pueden leer/escribir informacion privada de la aplicación

Extienden de la clase ContentProvider

Broadcast Recievers Responden a “mensajes generales”

Pueden crear notificaciones en la barra de estado Extienden de la clase BroadcastReciever

Page 5: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Intents

Los activities, Service y Broadcast Recivers se activan mediante mensajes llamados Intents que pueden ser de la

propia aplicación o de otras.

Para Activities y Services los intents se configuran con una Accion (VIEW , SEND; etc.) y una URI que especifica la ubicacion de la informacion sobre la que se va a actuar.

Para los Broadcast Recievers los intents incluyen unicamente el “mensaje” que se envió.

Page 6: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Manifest

AndroidManifest.xml , en el carpeta raiz de la aplicación

Registra todos los componentes que conforman la aplicación y sus capacidades de recibir intents.

Identifica los permisos que requiere la aplicación.

Define el nivel mínimo de API a utilizar.

Define requerimientos de hardware o software requeridos por la aplicación.

Define los APIs ( ademas del Android Framework API) con los que la aplicación va a interactuar.

Page 7: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Activity Lifecycle

Page 8: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Objetivos

1.Instalar IDE (Eclipse).2.Instalar el Plugin ADT.3.Configurar al menos un “Virtual Device” (AVD) o “Hardware Device”.4.Crear un Proyecto Android.5.Construir una aplicación Android.6.Desplegar la aplicación en un dispositivo

Page 9: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Instalación del Plugin ADT

En Eclipse:

Help -> Install New Software.... -> Add

Name: Android PluginArchive: ADT-10.0.0.zip

(en la carpeta BOOTCAMP)

[x] Developer Tools[ ] DESMARQUE "Check all update sites..."

Next, next, next....., restart.

Page 10: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Crear un Virtual Device

Window -> AVD Manager -> Virtual Devices->New

Name: MyAVDTarget: Android 2.1

Skin: HVGA

Create AVD

Close

Page 11: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Proyecto Hello World

File -> New -> Android Project

Project Name:   HelloWorldBuild Target: Android 2.1

Properties:  Application Name:  HelloWorld

  Package Name:  com.example.helloworld  Create Activity:  HelloActivity

Page 12: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

src/com/example/HelloActivity.java

- onCreate()

- Bundle savedInstanceState

- setContentView(R.layout.main);

Page 13: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

res/layout/main.xml

Define el layout de la Activity

Page 14: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

res/layout/main.xml

LinearLayout

Page 15: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

res/layout/main.xml

android:orientation="vertical"

android:layout_width / android:layout_height

"fill_parent""wrap_content“

String Resources:en Java: R.string.string_nameen XML:@string/string_name

Page 16: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

res/values/strings.xml

Cadenas de caracteres de la aplicación

Page 17: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 18: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Esto es una Activity

Page 19: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Upgrade: Una lista

Page 20: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Crear res/layout/list_item.xml [1]

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

xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"

android:padding="10dp"android:textSize="16sp" >

</TextView>

Define el layout de cada iten en la lista

Page 21: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Modificar res/layout/main.xml [2]

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

xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"

android:layout_width="fill_parent"android:layout_height="fill_parent"

><ListView

android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="fill_parent"

/></LinearLayout>

Page 22: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [2]

public class HelloActivity extends Activity i {    static final String[] COUNTRIES = { "Brazil",     

        "Argentina","Mexico" };@Override

public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    ListView lv = (ListView) findViewById(R.id.mylistview);    lv.setAdapter(new ArrayAdapter<String>(this, 

        R.layout.list_item,        COUNTRIES));

    }

Page 23: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 24: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [2]public class HelloActivity extends Activity implements

OnItemClickListener {    static final String[] COUNTRIES = { "Brazil",     

        "Argentina","Mexico" };@Override

public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);    ListView lv = (ListView) findViewById(R.id.mylistview);

    lv.setAdapter(new ArrayAdapter<String>(this,         R.layout.list_item,

        COUNTRIES));    lv.setOnItemClickListener(this);

}public void onItemClick(AdapterView<?> parent, View view, 

    int pos, long id) {    Toast.makeText(getApplicationContext(), 

        ((TextView) view).getText(),        Toast.LENGTH_SHORT).show();

}

Page 25: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 26: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

EditText y Botón para Añadir

Page 27: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Modificar main.xml [4]

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"

>    <LinearLayout

        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:orientation="horizontal">

        <EditText             android:id="@+id/mytextview"            android:layout_width="200sp"

            android:layout_height="wrap_content"            android:text=""/>

        <Button             android:id="@+id/mybutton"

            android:layout_width="wrap_content"             android:layout_height="wrap_content"

            android:text="Añadir"/>    </LinearLayout>

    <ListView        android:id="@+id/mylistview"

        android:layout_width="fill_parent"         android:layout_height="fill_parent"/>

</LinearLayout>

Page 28: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 29: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Ahora vamos a implementar...

Page 30: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [5]

package com.example.helloworld; 

import ...

public class HelloActivity extends Activity     implements OnItemClickListener, OnClickListener {

    private List<String> countries =         new ArrayList<String>();

    private ArrayAdapter<String> adapter;    @Override

    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);        countries.add("Mexico");        ListView lv = (ListView) 

            findViewById(R.id.mylistview);        adapter = new ArrayAdapter<String>(

            this, R.layout.list_item, countries);        lv.setAdapter(adapter);

        lv.setOnItemClickListener(this);        Button btn = (Button) findViewById(R.id.mybutton);

        btn.setOnClickListener(this);}...

Page 31: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

... HelloActivity.java [5]

public void onItemClick(AdapterView<?> parent,     View view, int pos, long id) {

    Toast.makeText(getApplicationContext(),                    ((TextView)view).getText(),

    Toast.LENGTH_SHORT).show();}

public void onClick(View view) {    EditText et = (EditText) findViewById(R.id.mytextview);

    countries.add(et.getText().toString());    adapter.notifyDataSetChanged();

}

Page 32: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 33: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Experimento

Cerrar la aplicación (oprimiendo "Home")

Arrancarla nuevamente desde el menú de aplicaciones.

¿Cual es el resultado?

Page 34: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Experimento

El contenido se queda en la lista!

¿Por qué pasa eso?

Page 35: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Experimento

Porque Android hace"Activity Lifecycle Management"

y puede mantener activas o cerrar Activities conforme la necesidad

Page 36: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Experimento 2

Cerrar la aplicación (oprimindo "Home")

Hacer Force Close a traves del menúMenu -> Manage Apps ->

Hello World -> Force Close

Arrancarla nuevamente desde el menú de aplicaciones.

¿Cual es el resultado?

Page 37: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Experimento 2

Resultado:

El contenido se fué.

Page 38: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

¿Como grabar el contenido de unamanera que sea persistente

entre sesiones de mi aplicación?

Page 39: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Fácil -> SharedPreferences

Completo -> Base de datos SQLite

Page 40: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

SharedPreferences

SharedPreferences sp =getPreferences(MODE_PRIVATE);

Leer:String x = sp.getString("key", "defaultvalue");

Grabar:SharedPreferences.Editor spe = sp.edit();

spe.putString("key", "value");spe.commit();

Page 41: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [6]

void saveData() {    SharedPreferences.Editor spe =

        getPreferences(MODE_PRIVATE).edit();    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < countries.size(); i++)        sb.append( ((i == 0) ? "" : ";")

            + countries.get(i));    spe.putString("countries", sb.toString());

    spe.commit();}

void loadData() {    SharedPreferences sp =                 getPreferences(MODE_PRIVATE);

    String countryList =     sp.getString("countries",

        "Argentina;Brazil;Chile;Mexico");    for (String country : countryList.split(";"))

        countries.add(country);}

Page 42: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [6]

public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);    loadData();

    ListView lv = (ListView)    findViewById(R.id.mylistview);

    adapter = new ArrayAdapter<String>(this,    R.layout.list_item, countries);

    lv.setAdapter(adapter);    lv.setOnItemClickListener(this);

    Button btn = (Button) findViewById(R.id.mybutton);    btn.setOnClickListener(this);

}

Page 43: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

HelloActivity.java [6]

public void onClick(View view) {    EditText et = (EditText)

    findViewById(R.id.mytextview);    countries.add(et.getText().toString());

    adapter.notifyDataSetChanged();

    saveData();}

Page 44: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Prueba

Project -> Run

(Ctrl + Shift + F11)

Page 45: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

El "Toast" que aparece cuando se hace click en la lista es aburrido...

¿Como se puede implementar un Web Search en lugar del Toast?

Page 46: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

... HelloActivity.java [7]

public void onItemClick(AdapterView<?> parent, 

    View view, int pos, long id) {    Uri uri =

        Uri.parse("http://en.wikipedia.org/" +        "wiki/" +

    Uri.encode(countries.get(pos), null));    Intent intent = new Intent(    Intent.ACTION_VIEW, uri);

    startActivity(intent);}

Page 47: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

¿Preguntas?

Page 48: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

Referencias:

Elaborado (con adaptaciones) a partir de los tutoriales:

http://developer.android.com/resources/tutorials/hello-world.htmlhttp://developer.android.com/resources/tutorials/views/index.html

Para mas información

http://developer.android.com/index.htmlAndroid Bootcamp 102 ( próximamente )

Page 49: ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE APLICACIONES MÓVILES

http://bsas.gtugs.org/