SlideShare una empresa de Scribd logo
http://www.nabbel.es




         Taller Práctico de Android
                       Javier Muñoz
                        (jmunoz@nabbel.es)

                              @jmunozf
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
¿Quién soy?



           Formación Académica                      Exp. Profesional
                ●   2003 Ing. Informática       ●   2010 Nabbel
                      Universitat Jaume I             Director

                ●   2008 PhD Ing. Software      ●   2008 Prodevelop
                      Universidad Politécnica         Jefe de Proyectos, I+D+i
                      de Valencia                     MOSKitt
@jmunozf                                              http://www.moskitt.org

                                                ●   2007 Integranova
                                                      Jefe de Proyectos
           Experiencia con Android
            ● https://play.google.com/store/apps/developer?id=Nabbel
            ● Profesor Curso Introducción Android en Universidad de


            Verano de la Universidad CEU Cardenal Herrera
¿Qué vamos a hacer hoy?



           Lector del tiempo
             Datos de http://www.aemet.es/


           Aprenderemos
               Uso básico del SDK
               Estructura proyecto Android
               Implementar pantallas
               Parseo XML datos remotos
               ContentProviders
               Tareas en background


    https://bitbucket.org/jmunoz/android-example-eltiempo
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Necesidad de Información




                             ¿Quién participa?
 ¿Cuándo empieza?



                                 ¿Cómo llegar?
¿Dónde es?



      ¿Qué ocurre ahora?

                           ¿Hay más parecidos?
Escenarios de Aplicación

                      Festivales Musicales




  Museos                                      Competiciones Deportivas




Congresos
                                                        Ferias


                              Eventos de Empresa


  Fiestas Populares              Parques Temáticos
Algunas Aplicaciones Nabbel




                Eventosfera
                                             INNOVALENCIA




                                                            Follow Us
San Silvestre                 Romeria 2011
   2010
Algunas Aplicaciones Nabbel
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Android: Arquitectura
Android: SDK



SDK + AVD
 Plataforma + Emuladores
 Documentación + Ejemplos
 Librerías de 3as partes
   Google Maps
   GalaxyTab


Eclipse Plugin
 Proyecto Eclipse tipo Android
 Herramientas Empaquetado
 Debugging
 Gestión del Emulador (copiar archivos, pantallazos, etc.)
Android: Arquitectura Aplicaciones



Activities                     Content Providers
 Pantallas... independientes    Acceso a datos entre
 entre sí                       aplicaciones
 Concepto principal             Independientes de su
                                persistencia (XML, SQLite,
                                remoto...)
Services
 Funcionalidad de larga
                               Broadcast Receivers
 duración sin UI
                                Escucha mensajes de difusión
 Services vs Threads →
 Services funcionan con app     Ejemplos: pantalla apagada,
 cerrada                        archivo descargados, batería
                                baja...
Android: Arquitectura Aplicaciones


Intents                                      Acciones estándar:
                                              ACTION_MAIN
  Mensajes asíncronos entre                   ACTION_VIEW

  componentes                                 ACTION_ATTACH_DATA
                                              ACTION_EDIT
  Enlazan componentes en                      ACTION_PICK

  tiempo de ejecución                         ACTION_CHOOSER
                                              ACTION_GET_CONTENT
  Contienen:                                  ACTION_DIAL


      Action                                  ACTION_CALL
                                              ACTION_SEND

      URI                                     ACTION_SENDTO
                                              ACTION_ANSWER
      Extras                                  ACTION_INSERT
                                              ACTION_DELETE
  ¿Qué acciones hay?                          ACTION_RUN

    Definidas en SDK                          ACTION_SYNC
                                              ACTION_PICK_ACTIVITY

    OpenIntents:                              ACTION_SEARCH
                                              ACTION_WEB_SEARCH
http://www.openintents.org/en/intentstable    ACTION_FACTORY_TEST
Android: Arquitectura Aplicaciones



Ejemplos de Acción/URI en Intents
 ACTION_VIEW content://contacts/people/1
 ACTION_DIAL content://contacts/people/1
 ACTION_DIAL tel:123
 ACTION_EDIT content://contacts/people/1


Ejecución de Intents
 Intent i = new Intent(this, IntentA.class);
 startActivity(i);


 Uri uri = Uri.parse( "http://iparty.aditel.org" );
 startActivity( new Intent( Intent.ACTION_VIEW, uri ) );
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Presentación
Autobombo
Conceptos Básicos
Desarrollo Aplicación
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Paso 1: Crear proyecto



New > Android Projet
Select Build Target:
 Usaremos 2.1 (level 7)
Android: Arquitectura Aplicaciones


Activity básica

 package com.example.helloandroid;


 import android.app.Activity;
 import android.os.Bundle;


 public class HelloAndroid extends Activity {
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
     }
 }
Ciclo de Vida
Activities: Ciclo de Vida
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
SDK y AVD Manager
                  Paso 2: Crear Emulador


●   AVD Manager
    ●   Gestionar emuladores
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Paso 3: Lanzar App en el Emulador
                          Herramientas
●   Emulator
    ●   Basado en QEMU
    ●   Diferentes instancias
        –   Tamaños de pantalla y densidad
        –   Skins
    ●   Soporta:
        –   Ubicaciones
        –   SD Cards
    ●   NO soporta
        –   Cámara
        –   Multi-touch
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Paso 4: Editar Interfaz de Usuario


Definición declarativa (XML) de la Interfaz
  Layouts → Posicionamiento
  Views → Interacción
Android: Interfaz de Usuario
Android: Interfaz de Usuario

<?xml version="1.0" encoding="utf-8"?>
<!-- Main Layout of Status Activity -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
      <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:gravity="center"
        android:textSize="30sp"
        android:layout_margin="10dp" android:text="@string/titleStatus"/>


      <EditText android:layout_width="fill_parent"
         android:layout_height="fill_parent" android:layout_weight="1"
        android:hint="@string/hintText" android:id="@+id/editText"
        android:gravity="top|center_horizontal"></EditText>


      <Button android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:text="@string/buttonUpdate"
        android:textSize="20sp" android:id="@+id/buttonUpdate"></Button>
</LinearLayout>
Android: Interfaz de Usuario
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Definición UI
                    Paso 5: Actualizar Interfaz de Usuario



                                   Definición UI
             Procedural                              Declarativa

TextView tv= new TextView(this)          <TextView

tv.setWidth(100);                         android:id="@+id/nameLabel"

tv.setHeight(60);                         android:text="phone:"

tv.setText("phone");                      android:layout_width="100"

setContentView(tv);                       android:layout_height="60"

                                         />
Identificación Componentes UI
                     Android UI XML

●   El atributo id identifica la vista dentro de la jerarquía

●   El símbolo (@) indica que viene un identificador

●   El símbolo (+) indica que es un nombre nuevo (no una
    referencia)

●   Todas las vistas deben definir:     <TextView
                                          android:id="@+id/nameLabel"
    ●   android:layout_width              android:text="phone:"
                                          android:layout_width="100"
    ●   android:layout_height             android:layout_height="60" />
Referenciar Componentes UI
                             Android UI XML
●   Clase Java con los identificadores de recursos:
    ●   Generada automáticamente al compilar (no tocar!!)
    ●   Se llamará: nuestro.paquete.R
    ●   Contiene identificadores de:
         –   Widgets de los Layouts
         –   Los archivos contenidos en “res/” (layouts, drawables, strings,
             colors, etc.)
    ●   Widgets accesibles desde el código Java

        Button btn = (Button) findViewById(R.id.acceptButton);
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Tratamiento de XML
                    Paso 6: Leer datos del servidor


●   Opciones para manejar el XML
    ●   SAX
        –   Basado en eventos
        –   Compatible con handlers Java pre-existente
        –   El más “estándar”
    ●   SAX Simplificado
        –   Se asocian eventos a etiquetas
        –   Evita gestión en el handler de situación actual
    ●   DOM
        –   Estructura tipo árbol
        –   Mayor consumo de memoria
    ●   XMLPull
        –   Lectura del XML guiada
        –   Pedimos elementos
SAX Simplificado
                                                   SAX Simplificado


public List<Noticia> parse(){                               item.getChild("link").setEndTextElementListener(
 final List<Noticia> noticias = new ArrayList<Noticia>();      new EndTextElementListener(){
                                                                    public void end(String body) {
 RootElement root = new RootElement("rss");                            noticiaActual.setLink(body);
 Element channel = root.getChild("channel");                        }
 Element item = channel.getChild("item");                       });

 item.setStartElementListener(new StartElementListener(){   item.getChild("description").setEndTextElementListener(
      public void start(Attributes attrs) {                     new EndTextElementListener(){
         noticiaActual = new Noticia();                           public void end(String body) {
      }                                                              noticiaActual.setDescripcion(body);
  });                                                             }
                                                                });
  item.setEndElementListener(new EndElementListener(){
       public void end() {                                  ...
          noticias.add(noticiaActual);
       }
   });
                                                                Xml.parse(this.getInputStream(),
 item.getChild("title").setEndTextElementListener(                   Xml.Encoding.UTF_8,
        new EndTextElementListener(){                                 root.getContentHandler());
          public void end(String body) {
            noticiaActual.setTitulo(body);
          }                                                 return noticias;
    });
                                                            }
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Paso 7: Cargar Imagen enno sepas (3)
                Android: Cosas que quizá Background


 Tareas en background: AsyncTask

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ProgressDialog dialog = new ProgressDialog(context);
    protected void onPreExecute() {
         this.dialog.setMessage("Progress start");
         this.dialog.show();
    }
     protected Bitmap doInBackground(String... urls) {
          return loadImageFromNetwork(urls[0]);
     }


     protected void onPostExecute(Bitmap result) {
          mImageView.setImageBitmap(result);
         dialog.dismiss();
     }
}          new DownloadImageTask().execute(“http://urlimage”);
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Android: Cosas que quizáSpinner (3)
              Paso 8: Configurar no sepas
                   Adapters
                   Spinner
●   Desplegable de Selección
●   Adapter para las opciones
Android: Cosas que quizáSpinner (3)
                     Paso 8: Configurar no sepas
                                 Adapters
●   Adaptar datos para una necesidad
●   LisAdapters (Interface)→ Datos para ser mostrados en ListView
    ●   (abstract) android.widget.BaseAdapter
         –   Clase base para todos los Adapter


    ●   android.widget.ArrayAdapter<T>
         –   Mostrar contenido de un Array o List


             public ArrayAdapter (Context context,
                         int resource,
                         int textViewResourceId,
                         List<T> objects)
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Desarrollo Aplicación
 1.- Crear Proyecto
 2.- Crear Emulador
 3.- Lanzar App en el Emulador
 4.- Editar Interfaz Usuario
 5.- Actualizar Interfaz de Usuario
 6.- Leer Datos del Servidor
 7.- Cargar Imagen en Background
 8.- Configurar Spinner
 9.- Empaquetar para Distribución
Android:Empaquetar para no sepas (3)
                Paso 9: Cosas que quizá Distribución
                      Compilar y Firmar
●   Utilizando Eclipse
    ●   Opción del menú contextual:
        –   Android Tools > Export Signed Application Package
    ●   Asistente para seleccionar:
        –   Archivo destino
        –   Almacén de clave
        –   Clave
    ●   Zipalign
        –   Ejecutado por el asistente
        –   Los datos descomprimidos empiezan en
              una cierta posición
        –   Mejora de rendimiento en dispositivos
Android: Cosas que quizá no sepas (3)
                     Crear clave privada
                      Creación Clave Privada



●   Condiciones
    ●   Contiene los datos tuyos o de tu organización
    ●   Validez después de 22 Octubre 2033
    ●   NO utilices la de debug
●   Creación

$ keytool -genkey -v -keystore my-release-key.keystore
  -alias alias_name -keyalg RSA -keysize 2048 -validity 10000


    ●   Pedirá:
         –   Definir los datos de la organización
         –   Crear el password del almacén de claves
         –   Crear el password de la clave
http://www.nabbel.es




         Taller Práctico de Android
                       Javier Muñoz
                        (jmunoz@nabbel.es)

                              @jmunozf

Más contenido relacionado

PDF
Desarrollo en Android: Conceptos Básicos
PPT
Curso Introducción a android
PPTX
Iniciación a Android
DOCX
Strem games
PPT
Fundamentos del Desarrollo de Aplicaciones para Android
PPT
Introduccion a Android
PDF
Deletreando Android
PPTX
Taller Android SHDH Ciudad Obregon
Desarrollo en Android: Conceptos Básicos
Curso Introducción a android
Iniciación a Android
Strem games
Fundamentos del Desarrollo de Aplicaciones para Android
Introduccion a Android
Deletreando Android
Taller Android SHDH Ciudad Obregon

La actualidad más candente (18)

PDF
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
DOCX
Cetis 109(2)
PDF
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
PDF
Material rap1
PPT
Tutorial Android 1
DOCX
Curso Android 2021
PPT
Curso Desarrollo Android
PDF
Curso Android Tema 2
PPTX
Android Basics v2.0
PPT
Curso desarrollo en android
DOCX
Guia generalandroidstudioseccion3.docx
PDF
"Android de la A a la Z" -- Unidad 4
PDF
002 Comohacerun J Clic
DOCX
"Android de la A a la Z" -- Unidad 2
PDF
"Android de la A a la Z" -- Unidad 3
PPT
Fundamentos desarrollo de Apps para Android
Desarrollo de Aplicaciones Moviles en Android: Temas Avanzados
Cetis 109(2)
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
Material rap1
Tutorial Android 1
Curso Android 2021
Curso Desarrollo Android
Curso Android Tema 2
Android Basics v2.0
Curso desarrollo en android
Guia generalandroidstudioseccion3.docx
"Android de la A a la Z" -- Unidad 4
002 Comohacerun J Clic
"Android de la A a la Z" -- Unidad 2
"Android de la A a la Z" -- Unidad 3
Fundamentos desarrollo de Apps para Android
Publicidad

Destacado (10)

PDF
Android web services - Spring Android
PPT
Presentacion Android Cliente/Servidor
PDF
31-Android Generalidades Sobre Servicios Webs con MySQL
PDF
Bases de Datos en Android y Desarrollo de Aplicaciones Móviles Multiplataforma
PPTX
Conexion a servidor desde android
PDF
El gran libro de android
PPTX
Ingeniería inversa y reingeniería de software
PDF
Manual programación android
DOCX
8 servidores web android
PPTX
RECURSOS DE LA EMPRESA: HUMANOS, MATERIALES, FINANCIEROS Y TECNOLOGICOS
Android web services - Spring Android
Presentacion Android Cliente/Servidor
31-Android Generalidades Sobre Servicios Webs con MySQL
Bases de Datos en Android y Desarrollo de Aplicaciones Móviles Multiplataforma
Conexion a servidor desde android
El gran libro de android
Ingeniería inversa y reingeniería de software
Manual programación android
8 servidores web android
RECURSOS DE LA EMPRESA: HUMANOS, MATERIALES, FINANCIEROS Y TECNOLOGICOS
Publicidad

Similar a Taller Práctico de Android (20)

ODP
Android Pres3
PDF
Android
PDF
Presentacion android mistela&tweets
DOCX
Cetis 109
PDF
Maestrosdelweb guia-android
PDF
Maestrosdelweb guia-android
PDF
Mdw guia-android
PDF
Guía Android
PDF
Mdw guia-android-1.3
PDF
Mdw guia-android-1.3
PDF
Introducción a Android: 10 cosas importantes que hay que entender
PPTX
Gadget review
PPTX
Gadget review
PPT
Taller de Android
PDF
Introducción a Android
PDF
Cómo agregar calidad a sus aplicaciones mediante pruebas
PDF
Sesion 11 Teoria.pdf
DOCX
R esume libro el gran libro de android
PPTX
Meetup app-moviles
PDF
Tripticoandroid
Android Pres3
Android
Presentacion android mistela&tweets
Cetis 109
Maestrosdelweb guia-android
Maestrosdelweb guia-android
Mdw guia-android
Guía Android
Mdw guia-android-1.3
Mdw guia-android-1.3
Introducción a Android: 10 cosas importantes que hay que entender
Gadget review
Gadget review
Taller de Android
Introducción a Android
Cómo agregar calidad a sus aplicaciones mediante pruebas
Sesion 11 Teoria.pdf
R esume libro el gran libro de android
Meetup app-moviles
Tripticoandroid

Más de Javier Muñoz (6)

PDF
Mecanismos de Persistencia en Android
PDF
MOSKitt UIM (short description)
PDF
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
PDF
No más "programación copy&paste". Generación automática de código con MOSKitt
PDF
MOSKitt Extensibility. Mutatis mutandis
ODP
MOSKitt Transformations And Traceability
Mecanismos de Persistencia en Android
MOSKitt UIM (short description)
MOSKitt: Herramienta de Modelado UML y Soporte a la Ingeniería del Software
No más "programación copy&paste". Generación automática de código con MOSKitt
MOSKitt Extensibility. Mutatis mutandis
MOSKitt Transformations And Traceability

Último (20)

PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
ACTIVIDAD 2.pdf j
PPTX
Administración se srevidores de apliaciones
DOCX
Trabajo colaborativo Grupo #2.docxmkkkkkkl
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
Temas y subtemas de las fichas 1 y 2.pdf
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
diagrama de pareto.pdf valerie giraldo diaz
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PPTX
Introduccion a servidores de Aplicaciones (1).pptx
DOCX
Trabajo colaborativo Grupo #2.docxmmuhhlk
PDF
La electricidad y la electrónica .pdf n
historia_web de la creacion de un navegador_presentacion.pptx
ACTIVIDAD 2.pdf j
Administración se srevidores de apliaciones
Trabajo colaborativo Grupo #2.docxmkkkkkkl
Presentación PASANTIAS AuditorioOO..pptx
Influencia-del-uso-de-redes-sociales.pdf
Temas y subtemas de las fichas 1 y 2.pdf
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
REDES INFORMATICAS REDES INFORMATICAS.pptx
Presentación de Redes de Datos modelo osi
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
diagrama de pareto.pdf valerie giraldo diaz
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Introduccion a servidores de Aplicaciones (1).pptx
Trabajo colaborativo Grupo #2.docxmmuhhlk
La electricidad y la electrónica .pdf n

Taller Práctico de Android

  • 1. http://www.nabbel.es Taller Práctico de Android Javier Muñoz (jmunoz@nabbel.es) @jmunozf
  • 4. ¿Quién soy? Formación Académica Exp. Profesional ● 2003 Ing. Informática ● 2010 Nabbel Universitat Jaume I Director ● 2008 PhD Ing. Software ● 2008 Prodevelop Universidad Politécnica Jefe de Proyectos, I+D+i de Valencia MOSKitt @jmunozf http://www.moskitt.org ● 2007 Integranova Jefe de Proyectos Experiencia con Android ● https://play.google.com/store/apps/developer?id=Nabbel ● Profesor Curso Introducción Android en Universidad de Verano de la Universidad CEU Cardenal Herrera
  • 5. ¿Qué vamos a hacer hoy? Lector del tiempo Datos de http://www.aemet.es/ Aprenderemos Uso básico del SDK Estructura proyecto Android Implementar pantallas Parseo XML datos remotos ContentProviders Tareas en background https://bitbucket.org/jmunoz/android-example-eltiempo
  • 8. Necesidad de Información ¿Quién participa? ¿Cuándo empieza? ¿Cómo llegar? ¿Dónde es? ¿Qué ocurre ahora? ¿Hay más parecidos?
  • 9. Escenarios de Aplicación Festivales Musicales Museos Competiciones Deportivas Congresos Ferias Eventos de Empresa Fiestas Populares Parques Temáticos
  • 10. Algunas Aplicaciones Nabbel Eventosfera INNOVALENCIA Follow Us San Silvestre Romeria 2011 2010
  • 15. Android: SDK SDK + AVD Plataforma + Emuladores Documentación + Ejemplos Librerías de 3as partes Google Maps GalaxyTab Eclipse Plugin Proyecto Eclipse tipo Android Herramientas Empaquetado Debugging Gestión del Emulador (copiar archivos, pantallazos, etc.)
  • 16. Android: Arquitectura Aplicaciones Activities Content Providers Pantallas... independientes Acceso a datos entre entre sí aplicaciones Concepto principal Independientes de su persistencia (XML, SQLite, remoto...) Services Funcionalidad de larga Broadcast Receivers duración sin UI Escucha mensajes de difusión Services vs Threads → Services funcionan con app Ejemplos: pantalla apagada, cerrada archivo descargados, batería baja...
  • 17. Android: Arquitectura Aplicaciones Intents Acciones estándar: ACTION_MAIN Mensajes asíncronos entre ACTION_VIEW componentes ACTION_ATTACH_DATA ACTION_EDIT Enlazan componentes en ACTION_PICK tiempo de ejecución ACTION_CHOOSER ACTION_GET_CONTENT Contienen: ACTION_DIAL Action ACTION_CALL ACTION_SEND URI ACTION_SENDTO ACTION_ANSWER Extras ACTION_INSERT ACTION_DELETE ¿Qué acciones hay? ACTION_RUN Definidas en SDK ACTION_SYNC ACTION_PICK_ACTIVITY OpenIntents: ACTION_SEARCH ACTION_WEB_SEARCH http://www.openintents.org/en/intentstable ACTION_FACTORY_TEST
  • 18. Android: Arquitectura Aplicaciones Ejemplos de Acción/URI en Intents ACTION_VIEW content://contacts/people/1 ACTION_DIAL content://contacts/people/1 ACTION_DIAL tel:123 ACTION_EDIT content://contacts/people/1 Ejecución de Intents Intent i = new Intent(this, IntentA.class); startActivity(i); Uri uri = Uri.parse( "http://iparty.aditel.org" ); startActivity( new Intent( Intent.ACTION_VIEW, uri ) );
  • 21. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 22. Paso 1: Crear proyecto New > Android Projet Select Build Target: Usaremos 2.1 (level 7)
  • 23. Android: Arquitectura Aplicaciones Activity básica package com.example.helloandroid; import android.app.Activity; import android.os.Bundle; public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
  • 24. Ciclo de Vida Activities: Ciclo de Vida
  • 25. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 26. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 27. SDK y AVD Manager Paso 2: Crear Emulador ● AVD Manager ● Gestionar emuladores
  • 28. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 29. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 30. Paso 3: Lanzar App en el Emulador Herramientas ● Emulator ● Basado en QEMU ● Diferentes instancias – Tamaños de pantalla y densidad – Skins ● Soporta: – Ubicaciones – SD Cards ● NO soporta – Cámara – Multi-touch
  • 31. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 32. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 33. Paso 4: Editar Interfaz de Usuario Definición declarativa (XML) de la Interfaz Layouts → Posicionamiento Views → Interacción
  • 35. Android: Interfaz de Usuario <?xml version="1.0" encoding="utf-8"?> <!-- Main Layout of Status Activity --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="30sp" android:layout_margin="10dp" android:text="@string/titleStatus"/> <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:hint="@string/hintText" android:id="@+id/editText" android:gravity="top|center_horizontal"></EditText> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/buttonUpdate" android:textSize="20sp" android:id="@+id/buttonUpdate"></Button> </LinearLayout>
  • 37. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 38. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 39. Definición UI Paso 5: Actualizar Interfaz de Usuario Definición UI Procedural Declarativa TextView tv= new TextView(this) <TextView tv.setWidth(100); android:id="@+id/nameLabel" tv.setHeight(60); android:text="phone:" tv.setText("phone"); android:layout_width="100" setContentView(tv); android:layout_height="60" />
  • 40. Identificación Componentes UI Android UI XML ● El atributo id identifica la vista dentro de la jerarquía ● El símbolo (@) indica que viene un identificador ● El símbolo (+) indica que es un nombre nuevo (no una referencia) ● Todas las vistas deben definir: <TextView android:id="@+id/nameLabel" ● android:layout_width android:text="phone:" android:layout_width="100" ● android:layout_height android:layout_height="60" />
  • 41. Referenciar Componentes UI Android UI XML ● Clase Java con los identificadores de recursos: ● Generada automáticamente al compilar (no tocar!!) ● Se llamará: nuestro.paquete.R ● Contiene identificadores de: – Widgets de los Layouts – Los archivos contenidos en “res/” (layouts, drawables, strings, colors, etc.) ● Widgets accesibles desde el código Java Button btn = (Button) findViewById(R.id.acceptButton);
  • 42. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 43. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 44. Tratamiento de XML Paso 6: Leer datos del servidor ● Opciones para manejar el XML ● SAX – Basado en eventos – Compatible con handlers Java pre-existente – El más “estándar” ● SAX Simplificado – Se asocian eventos a etiquetas – Evita gestión en el handler de situación actual ● DOM – Estructura tipo árbol – Mayor consumo de memoria ● XMLPull – Lectura del XML guiada – Pedimos elementos
  • 45. SAX Simplificado SAX Simplificado public List<Noticia> parse(){ item.getChild("link").setEndTextElementListener( final List<Noticia> noticias = new ArrayList<Noticia>(); new EndTextElementListener(){ public void end(String body) { RootElement root = new RootElement("rss"); noticiaActual.setLink(body); Element channel = root.getChild("channel"); } Element item = channel.getChild("item"); }); item.setStartElementListener(new StartElementListener(){ item.getChild("description").setEndTextElementListener( public void start(Attributes attrs) { new EndTextElementListener(){ noticiaActual = new Noticia(); public void end(String body) { } noticiaActual.setDescripcion(body); }); } }); item.setEndElementListener(new EndElementListener(){ public void end() { ... noticias.add(noticiaActual); } }); Xml.parse(this.getInputStream(), item.getChild("title").setEndTextElementListener( Xml.Encoding.UTF_8, new EndTextElementListener(){ root.getContentHandler()); public void end(String body) { noticiaActual.setTitulo(body); } return noticias; }); }
  • 46. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 47. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 48. Paso 7: Cargar Imagen enno sepas (3) Android: Cosas que quizá Background Tareas en background: AsyncTask private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { ProgressDialog dialog = new ProgressDialog(context); protected void onPreExecute() { this.dialog.setMessage("Progress start"); this.dialog.show(); } protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); dialog.dismiss(); } } new DownloadImageTask().execute(“http://urlimage”);
  • 49. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 50. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 51. Android: Cosas que quizáSpinner (3) Paso 8: Configurar no sepas Adapters Spinner ● Desplegable de Selección ● Adapter para las opciones
  • 52. Android: Cosas que quizáSpinner (3) Paso 8: Configurar no sepas Adapters ● Adaptar datos para una necesidad ● LisAdapters (Interface)→ Datos para ser mostrados en ListView ● (abstract) android.widget.BaseAdapter – Clase base para todos los Adapter ● android.widget.ArrayAdapter<T> – Mostrar contenido de un Array o List public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)
  • 53. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 54. Desarrollo Aplicación 1.- Crear Proyecto 2.- Crear Emulador 3.- Lanzar App en el Emulador 4.- Editar Interfaz Usuario 5.- Actualizar Interfaz de Usuario 6.- Leer Datos del Servidor 7.- Cargar Imagen en Background 8.- Configurar Spinner 9.- Empaquetar para Distribución
  • 55. Android:Empaquetar para no sepas (3) Paso 9: Cosas que quizá Distribución Compilar y Firmar ● Utilizando Eclipse ● Opción del menú contextual: – Android Tools > Export Signed Application Package ● Asistente para seleccionar: – Archivo destino – Almacén de clave – Clave ● Zipalign – Ejecutado por el asistente – Los datos descomprimidos empiezan en una cierta posición – Mejora de rendimiento en dispositivos
  • 56. Android: Cosas que quizá no sepas (3) Crear clave privada Creación Clave Privada ● Condiciones ● Contiene los datos tuyos o de tu organización ● Validez después de 22 Octubre 2033 ● NO utilices la de debug ● Creación $ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 ● Pedirá: – Definir los datos de la organización – Crear el password del almacén de claves – Crear el password de la clave
  • 57. http://www.nabbel.es Taller Práctico de Android Javier Muñoz (jmunoz@nabbel.es) @jmunozf