1. Cursos de Verano
Desarrollo de aplicaciones móvil Android
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
2. Objetivos del Curso
Dar a conocer las tecnologías de hoy en día a los alumnos.
Comprender el funcionamiento de Android
Aprender a manejar el entorno de desarrollo para diseñar aplicaciones Android.
Planificación Curso
Lunes 9 de enero de 2012: 10:50 – 13:30 hrs.
˃ Sesión 1:
+ Presentación,
+ Introducción al mundo de la Informática,
+ Introducción Android.
Martes 10 de enero de 2012: 14:30 – 18:30 hrs.
˃ Sesión 2:
+ Inicio de ejemplo de aplicación Android
+ Explicar modelo de desarrollo de la aplicación
+ Desarrollo de aplicación en Android.
Miércoles 11 de enero de 2012: 10:50 a 13:30 hrs.
˃ Sesión 3:
+ Finalización de la App ejemplo en el taller
+ Formar grupos de trabajo y pensar la idea a desarrollar
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
3. Jueves 12 de enero de 2012: 10:50 a 13 hrs y 14:30 a 18:30 hrs.
˃ Sesión 4 :
+ Desarrollo de aplicación por grupos.
˃ Sesión 5
+ Finalización y presentación de la aplicación por grupos.
Sesión I
1 .- Aprendiendo un poco de modelos …
2 .- ¿Qué es Android?
3 .- ¿Qué es un Sistema operativo?
4 .- ¿Qué es una aplicación?
5 .- La tienda de aplicaciones de Android
1 .Aprendiendo un poco de modelos
Existen hoy 4 modelos que nos describen como funciona hoy la comunicación hombre –
computadora:
o La computadora personal
o La realidad virtual
o La realidad aumentada
o La realidad ubicua
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
4. La computadora personal, es la comunicación donde un usuario interactúa con su
computadora.
Computadora Personal
La realidad virtual es el sistema donde la interacción y sensación de presencia son igual
al del mundo real.
Para que exista la realidad virtual, tiene que existir algún medio tecnológico que nos
brinde la posibilidad de sensación de presencia física a través de sensores visuales,
auditivos y ópticos.
También debe existir una manera fácil de manipular los objetos virtuales, de la misma
forma que los reales.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
5. Realidad Virtual
La realidad aumentada mezcla la realidad con el mundo virtual, para crear una realidad
mixta en tiempo real.
En la realidad aumentada nos permiten añadir información al mundo real, no es igual a la
realidad virtual, ya que esta sustituye la realidad física por la virtual, lo cual no sucede en
la realidad aumentada.
Realidad Aumentada
La realidad ubicua permite que la información este en todas partes, ya sea en dispositivos
grandes o pequeños.
La computación ubicua forma parte del mundo real y amplia las posibilidades en el.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
6. Realidad ubicua
Uno de los medios de estar siempre comunicados, es la telefonía celular, la cual ha tenido
un gran avance este último tiempo:
Avances telefonía celular
En esta imagen podemos darnos cuenta como ha avanzado esta, hace poco tiempo
escuchábamos de los “celulares ladrillos”, los cuales fácilmente han quedado en el olvido
y han evolucionado a los modernos Smartphone, que son denominados comercialmente
como celulares inteligentes, y nos permiten más cosas que los teléfonos móviles común,
tienen teclado, pantallas táctiles diferentes.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
7. 2. ¿Qué es Android?
Android es un sistema operativo creado por Google para smartphone, el cual es usado
por muchas marcas que existen en el mercado, Motorola, Samsung, LG, entre muchas
otras.
Android es de código abierto, lo cual significa que miles de miles de programadores
alrededor del mundo pueden crear aplicaciones sin restricciones para nuestros
smartphone.
3. ¿Qué es un sistema operativo?
Es un programa que gestiona varios procesos (editores de textos, antivirus, juegos, etc.)
los más conocidos para pc son Windows de Microsoft, también podemos mencionar a
Ubuntu de Linux, Snow Leopard de Mac.
Para celulares también tenemos sistemas operativos, no son los mismos, ya que su nivel
de trabajo es menor que un computador por ende se crean sistemas operativos especiales
pensando en los dispositivos móviles:
Los más conocidos son Android de Google que será en el que trabajaremos, a Windows
Mobile de Microsoft y a IOS de Apple.
4. ¿Qué es una aplicación?
Una aplicación es un programa de software, como un juego, un antivirus, una calculadora,
etc.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
8. 5. Tienda de aplicaciones de Android: Android Market
Android nos ofrece su tienda de aplicaciones, donde podremos encontrar muchas App, de
diferentes tipos, deportes, ocio, productividad, y más.
En la Market encontraremos aplicaciones gratuitas y de pago, pero las de pago son de
costos bajos
Sesión II
1 .- Inicio de ejemplo de aplicación Android
2 .- Explicar modelo de desarrollo de la aplicación
3 .- Desarrollo de aplicación en Android.
1. Inicio ejemplo de aplicación en Android
Para poder conocer más acerca de Android, y ver que la realización de aplicaciones
para este, son entretenidas, y realizables, crearemos una aplicación que maneje las
notas de sus asignaturas y nos entregue el promedio que llevan general con todas las
asignaturas.
Para poder expandir el conocimiento aprendido en esta semana, crearemos esta
aplicación bajo el “Modelo 3 capas” el cual consta:
Capa 1 -> Datos
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
9. Capa 2 -> Lógica de Datos
Capa 3 -> Interfaz de usuario
No se pretende que logren un manejo inmediato de estos conceptos, pero que si se
entienda la idea, cuando hablamos que en la capa 1, tenemos los datos, nos referimos
que es lugar donde almacenaremos información, por ejemplo el registro civil tiene
gran cantidad de información de todas las personas que existen y que no en nuestro
país, imaginemos que el lugar donde se encuentra es toda esa información es un gran
contenedor llamado base de datos o banco de datos.
Contenedor de datos
En la capa 2 mencionamos a la lógica de negocio, este nombre no nos dice mucho de que
se trata, pero debemos quedarnos con que es aquel que maneja los datos de nuestro
contenedor, saca datos, agrega datos, elimina datos, etc.
Se encuentra en una posición intermedia porque es el que recibe ordenes, recibe una
petición de algo y el la ejecuta y responde al que le pregunto.
En la capa 3, mencionamos a la interfaz de usuario, la que fácilmente definiremos como
aquella que el usuario visualiza, es el producto final.
Esta capa recibe peticiones de usuario, la cual la enviar a la capa de negocio y recibe la
respuesta y realiza lo pedido por el usuario.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
10. Capa de
Negocio
Modelo de 3 capas
Creación del modelo de datos
Para poder crear el modelo de datos, nos apoyamos en un software llamado Visual
Paradigm, es uno de muchos que nos ayudan a crear estos modelos.
Visual Paradigm
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
11. Para poder crear el modelo debemos darle el nombre a nuestro contenedor, le
llamaremos notas_app, y crearemos un espacio donde dejaremos la información o
datos, llamada “TABLA” de nombre Asignatura, dentro de esta tabla dejaremos en
cada columna un dato específico, como nombre de la asignatura y sus notas
correspondientes.
Tabla: Asignatura
Creación modelo de negocio
Una vez creado nuestro modelo de datos, pasamos al siguiente paso, que es crear
el modelo de negocio, crearemos las posibles solicitudes de datos que le hará la
interfaz de usuario.
Para realizar esto, trabajaremos en el IDE Eclipse 3.6 bajo el lenguaje de
programación Java.
Si bien programamos en Java, no deberás realizar esto, ya que se requiere un nivel
de programación maduro.
El modelo de negocio será una caja negra en como se hizo, pero si conocerás como
podrás comunicarte con el y como se comunicará contigo.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
12. Lógica o modelo de negocio
La manera en que podrás comunicarte con el modelo de negocio será a través de
agregarAsignatura y el modelo te responderá por medio de mostrarPromedio.
Creación cliente
Una vez listas ambas capas, comenzaremos con la creación de nuestra interfaz de
usuario, que será la capa 3, y que será creada en Android.
Sesión III:
Creación cliente en Android
Retomando la última parte, debemos construir la interfaz de usuario en Android.
Primero creamos un proyecto de aplicación de nombre NotasAsigDAEM, de la
siguiente forma:
1. - Click derecho -> New -> Android Project
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
13. 2.- Nos aparecerá una ventana como la siguiente y digitamos el nombre que
dijimos anteriormente, NotasAsigDAEM:
Nuevo Proyecto Android
3.- Presionamos Next ->, y nos aparecerá una ventana donde tendremos que seleccionar
la versión de Android en que trabajaremos, nosotros ocuparemos la versión 2.1.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
14. Seleccionar versión de Android a trabajar
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
15. 4.- Presionamos Next -> nuevamente y nos aparece una ventana donde deberemos dar la
última información de configuración, en Package Name digita notas.daem y Finish.
5.- Una vez finalizado, nos aparecerá nuestro proyecto de esta forma:
Nuevo proyecto
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
16. Ahora comencemos armas nuestra App, nos vamos a res -> Layout-> main.xml
*Árbol de la App
Con ayuda del editor grafico que nos facilita Android, para crear las pantallas editaremos
el main.xml
Editor gráfico de Android
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
17. Arrastraremos un TextView, un EditText y un Button, y vamos personalizando cada
componente.
El TextView, le hacemos click derecho Edit Text:
Y agregamos un nuevo String, en el botón de abajo New String.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
18. 1
2
En String colocamos el texto que queremos que se vea (1) y en New R.String (2) como se
llamará interno, le damos a OK y luego la seleccionamos y a Ok de nuevo.
Repitamos los mismos pasos para el texto del Botón, y nos diga Agregar Notas.
El EditText, será el encargado de recibir lo que el usuario escriba en la pantalla, lo
personalizaremos, pero en el caso de su ID, que será el que nos servirá para identificarlo,
click derecho Edit ID -> y le ponemos como id editasignatura.
Ya terminamos con una pantalla, ahora crearemos otra nueva que aparecerá cuando
presionemos el botón Agregar Notas.
Vamos a Layout -> (click derecho) -> New -> Android XML File
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
19. Creación de un XML nuevo
En File debemos colocar el nombre que le pondremos a nuestros xml, los nombres son en
minúscula, sin espacios, le pondremos notas.xml
Nombre de Android XML File
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
20. Una vez creado nuestro xml notas.xml, le agregaremos los componentes de la misma
manera que lo hicimos en el main.xml.
Agregaremos:
1 TextView para el nombre de la Asignatura,
1 TableLayout para agregar dentro las notas,
3 TableRow
Dentro de cada TableRow agregaremos un TextView y un EditText
1 Button para enviar las notas.
Debería quedar como se muestra en la siguiente imagen.
notas.xml con sus componentes.
Partamos dándole nombres más representativos a nuestros componentes, el TextView no
tendrá texto, se cargará desde la pantalla anterior, mas adelante veremos eso, así que hay
que quitarle el texto que trae por defecto.
Los TextView dentro de la TableLayout, deben ir con los nombre Nota 1, Nota 2 y Nota 3, y
los EditText, debes editar los Identificadores, Edit ID, por editnota1, editnota2 y editnota3.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
21. Al botón también hay que cambiar el texto, por el texto “Enviar Notas”, y estaríamos listos
con nuestro notas.xml
Nota: La interfaz se puede mejorar, pero no esencial en este instante.
La programación quedará a disposición de lo que quieren profundizar en el código, pero
no se explicará como se realizó. Al final de este informe se adjuntará como anexo el
código fuente.
Al finalizar la aplicación podremos ver en el emulador de Android la aplicación como
sigue:
App de Notas
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
22. Sesión 4
1 .- Desarrollo de aplicación por grupos.
2 .- Finalización de la App y presentación.
Para la última sesión, se desafiará a los participantes a la creación de alguna aplicación
sencilla, y fácil que se pueda desarrollar en grupo.
Se deben tener en cuenta algunos puntos para poder desarrollar la idea:
Se debe buscar satisfacer una necesidad.
Debe ser sencilla
Beneficios o mejoras al realizar la App.
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
23. Anexos
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class NotasAsigDAEMActivity extends Activity {
EditText nombreasignatura;
Button btnguardaasig;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nombreasignatura = (EditText)findViewById(R.id.editasignatura);
btnguardaasig = (Button)findViewById(R.id.btnguardaasig);
btnguardaasig.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String nameAsignatura =
nombreasignatura.getText().toString();
if(!("").equals(nameAsignatura) && nameAsignatura != null){
Intent i = new Intent();
i.setClass(getApplicationContext(), NotaApp.class);
i.putExtra("asignatura", nameAsignatura);
startActivity(i);
}
else{
Toast.makeText(getApplicationContext(), "No ha
digitado una asignatura", Toast.LENGTH_LONG).show();
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
24. }
}
});
}
}
Clase Nota.java
import ws.Conexionws;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class NotaApp extends Activity {
TextView textoAsignatura;
EditText nota1;
EditText nota2;
EditText nota3;
Button btnagregarnotas;
Conexionws cws = new Conexionws();
String asignatura = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.notas);
textoAsignatura = (TextView) findViewById(R.id.textAsignatura);
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
25. nota1 = (EditText) findViewById(R.id.editnota1);
nota2 = (EditText) findViewById(R.id.editnota2);
nota3 = (EditText) findViewById(R.id.editnota2);
btnagregarnotas =(Button)findViewById(R.id.btnguardabd);
Bundle extras = getIntent().getExtras();
if (extras != null) {
asignatura = extras.get("asignatura").toString();
if (asignatura != null) {
textoAsignatura.setText(asignatura);
}
}
btnagregarnotas.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int n1 = Integer.valueOf(nota1.getText().toString());
int n2 = Integer.valueOf(nota2.getText().toString());
int n3 = Integer.valueOf(nota3.getText().toString());
String resultado = cws.guardanotas(asignatura,n1,n2,n3 , 1);
if(("2").equals(resultado)){
Toast.makeText(getApplicationContext(), "Fue
ingresada satisfactoriamente", Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(), "NO pudo
ser guardada", Toast.LENGTH_LONG).show();
}
}
});
}
/**
* Menu opcional Volver
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
26. MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menupromedio, menu);
return true;
}
/**
* Evento que se genera al seleccionar alguna opcion en el menu opcional
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.idconocerprom:
String resultado = cws.pedirPromedio(1);
Toast.makeText(getApplicationContext(), "Tú promedio es :
"+resultado, Toast.LENGTH_LONG).show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Clase Webservice Conexión.java
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
public class Conexionws {
private static String METHOD_NAME ;
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
27. private static String NAMESPACE ;
private static String URL;
String datosJsonString= "";
public void coneccionwsPropio(){
NAMESPACE = "http://webservices";
URL =
"http://186.10.199.201:8080/NotasDaem/services/NotasDaemApp?wsdl";
}
public void coneccionwsExterno(){
NAMESPACE = "http://webservices";
URL =
"http://200.13.4.205:8080/NotasDaem/services/NotasDaemApp?wsdl";
}
/**
*
* @param asignaturatex
* @param n1
* @param n2
* @param n3
* @param idpersona
* @return
*/
public String guardanotas(String asignaturatex, int n1,int n2, int n3, int idpersona){
coneccionwsExterno();
METHOD_NAME = "agregaAsignatura";
String SOAP_ACTION = NAMESPACE + METHOD_NAME;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo asignatura = new PropertyInfo();
asignatura.setName("asignatura");
asignatura.setValue(asignaturatex);
asignatura.setType(String.class);
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
28. PropertyInfo nota1 = new PropertyInfo();
nota1.setName("nota1");
nota1.setValue(n1);
nota1.setType(int.class);
PropertyInfo nota2 = new PropertyInfo();
nota2.setName("nota2");
nota2.setValue(n2);
nota2.setType(int.class);
PropertyInfo nota3 = new PropertyInfo();
nota3.setName("nota3");
nota3.setValue(n3);
nota3.setType(int.class);
PropertyInfo ida = new PropertyInfo();
ida.setName("idalumno");
ida.setValue(idpersona);
ida.setType(int.class);
request.addProperty(asignatura);
request.addProperty(nota1);
request.addProperty(nota2);
request.addProperty(nota3);
request.addProperty(ida);
SoapSerializationEnvelope soapEnvelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.implicitTypes =true;
soapEnvelope.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
try
{
aht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive resultString =
(SoapPrimitive)soapEnvelope.getResponse();
datosJsonString =resultString.toString();
return datosJsonString;
}
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
29. catch (Exception e)
{
e.printStackTrace();
datosJsonString = "Error Conexion";}
return datosJsonString;
}
/**
* Metodo que calcula el promedio general de las notas
* @param idperso
* @return
*/
public String pedirPromedio(int idperso){
coneccionwsExterno();
METHOD_NAME = "mostrarPromedio";
String SOAP_ACTION = NAMESPACE + METHOD_NAME;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo ida = new PropertyInfo();
ida.setName("idPersona");
ida.setValue(idperso);
ida.setType(int.class);
request.addProperty(ida);
SoapSerializationEnvelope soapEnvelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.implicitTypes =true;
soapEnvelope.setOutputSoapObject(request);
AndroidHttpTransport aht = new AndroidHttpTransport(URL);
try
{
aht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive resultString =
(SoapPrimitive)soapEnvelope.getResponse();
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
30. datosJsonString =resultString.toString();
return datosJsonString;
}
catch (Exception e)
{
e.printStackTrace();
datosJsonString = "Error Conexion";}
return datosJsonString;
}
}
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl
31. AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="notas.daem"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".NotasAsigDAEMActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="NotaApp"></activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
Centro de Estudios de Ingeniería de Software
María José Rioseco, maria.rioseco@opensystem.cl