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

Post on 10-May-2015

1.217 views 0 download

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.

Transcript of ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE...

Android Bootcamp 101:Mi primera Aplicación Android

Leo Fishmanleo@gtugs.org

Buenos Aires GTUG

Descarga de Archivos

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

¿Que es Android?

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

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

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.

Activity Lifecycle

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

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.

Crear un Virtual Device

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

Name: MyAVDTarget: Android 2.1

Skin: HVGA

Create AVD

Close

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

src/com/example/HelloActivity.java

- onCreate()

- Bundle savedInstanceState

- setContentView(R.layout.main);

res/layout/main.xml

Define el layout de la Activity

res/layout/main.xml

LinearLayout

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

res/values/strings.xml

Cadenas de caracteres de la aplicación

Prueba

Project -> Run

(Ctrl + Shift + F11)

Esto es una Activity

Upgrade: Una lista

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

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>

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));

    }

Prueba

Project -> Run

(Ctrl + Shift + F11)

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();

}

Prueba

Project -> Run

(Ctrl + Shift + F11)

EditText y Botón para Añadir

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>

Prueba

Project -> Run

(Ctrl + Shift + F11)

Ahora vamos a implementar...

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);}...

... 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();

}

Prueba

Project -> Run

(Ctrl + Shift + F11)

Experimento

Cerrar la aplicación (oprimiendo "Home")

Arrancarla nuevamente desde el menú de aplicaciones.

¿Cual es el resultado?

Experimento

El contenido se queda en la lista!

¿Por qué pasa eso?

Experimento

Porque Android hace"Activity Lifecycle Management"

y puede mantener activas o cerrar Activities conforme la necesidad

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?

Experimento 2

Resultado:

El contenido se fué.

¿Como grabar el contenido de unamanera que sea persistente

entre sesiones de mi aplicación?

Fácil -> SharedPreferences

Completo -> Base de datos SQLite

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();

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);}

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);

}

HelloActivity.java [6]

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

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

    adapter.notifyDataSetChanged();

    saveData();}

Prueba

Project -> Run

(Ctrl + Shift + F11)

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

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

... 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);}

¿Preguntas?

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 )

http://bsas.gtugs.org/