Global Azure Bootcamp Bogotá 2016: EMS + Microsoft Azure juntos
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE...
-
Upload
leofishman -
Category
Technology
-
view
1.216 -
download
0
description
Transcript of ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPRENDIMIENTO DE...
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/