SlideShare una empresa de Scribd logo
Mi primera Aplicación Android ¡¡¡Bienvenidos!!! Setiembre 2011 Gabriel Kouyoumdjian Gabriel Olivera
GTUGs: Google Tecnology User Groups Android, AppEngine, APIs de productos, developer tools, proyectos open source  267   #capítulos (activos + incubando) 545   #eventos en los últimos seis meses En Uruguay: uy-gtug.org
¿Por qué un Bootcamp de Android?
Cantidad estimada de Dispositivos con Android activados por d ía
Evolución de la Aplicaciones móviles disponibles en las principales tiendas
 
 
Lámparas, I’m Watch, TV
Vamos al Bootcamp!
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instalación del Plugin ADT En Eclipse: Help -> Install New Software.... -> Add Name:  Android Plugin Archivo:   ADT-12.0.0.zip (en la carpeta BOOTCAMP) [x] Developer Tools [ ] DESMARCAR "Check all update sites..." Next, next, next....., restart.
Configurar Ubicación de la SDK En Eclipse: Preferences -> Android SDK Location:  BOOTCAMP/android-sdk.../ Click en "Apply" Click en "OK"
Crear un nuevo Emulador Window -> AVD Manager -> Virtual Devices->New Name:  MyAVD Target:  Android 2.1 Resolution/Built-In:  HVGA Create AVD Close
Proyecto Hello World File -> New -> Android Project Project Name:    Hello World Build Target:  Android 2.1 Properties:    Application Name:  Hello World    Package Name:  com.example.helloworld    Create Activity:  HelloActivity
src/com/example/HelloActivity.java - onCreate() - Bundle savedInstanceState - setContentView(R.layout.main);
El ciclo de vida de una Aplicación Android
res/layout/main.xml Definir el layout de la Actividad (Activity)
res/layout/main.xml LinearLayout
res/layout/main.xml android:orientation="vertical" android:layout_width / android:layout_height "fill_parent" "wrap_content" "@string/hello"
res/values/strings.xml Cadenas de caracteres que serán utilizadas por la aplicación
Prueba Project -> Run (Ctrl + Shift + F11)
Ejemplo de una Actividad
Hello World no está mal pero… ¿no es un poco básico?
Upgrade: Una lista
Crear res/layout/list_item.xml [1] <? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> < TextView   xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; android:padding = &quot;10dp&quot; android:textSize = &quot;16sp&quot;   > </ TextView > Definir el layout de cada elemento de la lista
Modificar res/layout/main.xml [2] <? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> < LinearLayout   xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:orientation = &quot;vertical&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; > < ListView android:id = &quot;@+id/mylistview&quot;   android:layout_width = &quot;fill_parent&quot;   android:layout_height = &quot;fill_parent&quot;   /> </ LinearLayout >
HelloActivity.java [3] public class  HelloActivity  extends  Activity  implements  OnItemClickListener  {    static final  String[]  COUNTRIES  = {  &quot;Uruguay&quot; ,               &quot;Argentina&quot; , &quot;Brasil&quot;  };    @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)
Editar Texto y botón para Agregar
Modificar main.xml [4] <? xml   version = &quot;1.0&quot;   encoding = &quot;utf-8&quot; ?> < LinearLayout   xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:orientation = &quot;vertical&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; >      < LinearLayout            android:layout_width = &quot;fill_parent&quot;          android:layout_height = &quot;wrap_content&quot;          android:orientation = &quot;horizontal&quot; >          < EditText               android:id = &quot;@+id/mytextview&quot;              android:layout_width = &quot;200sp&quot;              android:layout_height = &quot;wrap_content&quot;              android:text = &quot;&quot; />          < Button                android:id = &quot;@+id/mybutton&quot;                android:layout_width = &quot;wrap_content&quot;                android:layout_height = &quot;wrap_content&quot;              android:text = &quot;Agregar&quot; />      </ LinearLayout >      < ListView          android:id = &quot;@+id/mylistview&quot;            android:layout_width = &quot;fill_parent&quot;            android:layout_height = &quot;fill_parent&quot; /> </ LinearLayout >
Prueba Project -> Run (Ctrl + Shift + F11)
Tiempo de 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( &quot;Uruguay&quot; );          countries .add( “Argentina&quot; ); countries .add( “Brasil&quot; ); countries .add( “Chile&quot; ); countries .add( “Mexico&quot; ); 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 (presionando &quot;Home&quot;) Iniciar nuevamente a partir del menú de aplicaciones. ¿Cuál es el resultado?
Resultado El contenido continúa en la lista. ¿Por qué sucede esto?
Experimento Porque  Android hace lo que llamamos &quot;Activity Lifecycle Management&quot; ...y puede mantener activas o cerrar las Activities de acuerdo a las necesidades
Experimento 2 Cerrar la aplicación (presionando &quot;Home&quot;) Forzar el cierre de la aplicación a través del menú Menu -> Manage Apps ->  Hello World -> Force Stop Iniciar nuevamente a partir del menú de aplicaciones. ¿Cuál es el resultado esta vez?
Resultado El Contenido de la lista desapareció
Persistencia Fácil ->  SharedPreferences Completo ->  SQLite
Fácil ->  SharedPreferences Completo ->  Base de datos SQLite
SharedPreferences SharedPreferences sp = getPreferences(MODE_PRIVATE); Leer: String x = sp.getString(&quot;key&quot;, &quot;defaultvalue&quot;); Escribir: SharedPreferences.Editor spe = sp.edit(); spe.putString(&quot;key&quot;, &quot;value&quot;); 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) ?  &quot;&quot;  :  &quot;;&quot; )               +  countries .get(i));      spe.putString( &quot;countries&quot; , sb.toString());      spe.commit(); } void  loadData() {      SharedPreferences sp =                   getPreferences( MODE_PRIVATE );      String countryList =       sp.getString( &quot;countries&quot; ,          &quot;Uruguay;Argentina;Brasil;Chile;Mexico&quot; );      for  (String country : countryList.split( &quot;;&quot; ))          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 &quot;Toast&quot; que aparece al hacer click en la lista tampoco está muy bueno... ¿Cómo se pode implementar una búsqueda en la Web en vez del Toast?
... HelloActivity.java [7] public   void  onItemClick(AdapterView<?> parent,       View view,  int  pos,  long  id) {      Uri uri = Uri.parse(&quot; http :// www.google.com/search?hl=en&q= &quot; + Uri.encode(countries.get(pos), null) +  &quot;&btnI= &quot;   +      Uri.encode(&quot;I'm Feeling Lucky&quot;));      Intent intent =  new  Intent(      Intent. ACTION_VIEW , uri);       startActivity(intent); }
Referencias: Elaborado (con adaptaciones) a partir de los tutoriales: http://developer.android.com/resources/tutorials/hello-world.html http://developer.android.com/resources/tutorials/views/index.html
¡Gracias! ¡¡¡Hasta la próxima!!! Gabriel Kouyoumdjian (gabriel.kb@gtugs.org) Gabriel Olivera (gabriel.olivera@gtugs.org)

Más contenido relacionado

Destacado

Open house
Open houseOpen house
Open house
William Stewart
 
Social Media & U.S. Presidential Fundraising
Social Media & U.S. Presidential FundraisingSocial Media & U.S. Presidential Fundraising
Social Media & U.S. Presidential FundraisingJacobDybedahl
 
The value of my network
The value of my networkThe value of my network
The value of my network
William Stewart
 
VM ロールで仮想デスクトップ環を作ってみよう
VM ロールで仮想デスクトップ環を作ってみようVM ロールで仮想デスクトップ環を作ってみよう
VM ロールで仮想デスクトップ環を作ってみようMasayuki Ozawa
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?Masayuki Ozawa
 
About Go
About GoAbout Go
About Go
Jongmin Kim
 
7 steps valuation
7 steps valuation7 steps valuation
7 steps valuation
William Stewart
 

Destacado (8)

Open house
Open houseOpen house
Open house
 
Final powerpoint
Final powerpointFinal powerpoint
Final powerpoint
 
Social Media & U.S. Presidential Fundraising
Social Media & U.S. Presidential FundraisingSocial Media & U.S. Presidential Fundraising
Social Media & U.S. Presidential Fundraising
 
The value of my network
The value of my networkThe value of my network
The value of my network
 
VM ロールで仮想デスクトップ環を作ってみよう
VM ロールで仮想デスクトップ環を作ってみようVM ロールで仮想デスクトップ環を作ってみよう
VM ロールで仮想デスクトップ環を作ってみよう
 
Seas で語られたこととは?
Seas で語られたこととは?Seas で語られたこととは?
Seas で語られたこととは?
 
About Go
About GoAbout Go
About Go
 
7 steps valuation
7 steps valuation7 steps valuation
7 steps valuation
 

Similar a Android Bootcamp - GTUG Uruguay

Android
AndroidAndroid
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
leofishman
 
Clase 1 Programacion Android
Clase 1 Programacion AndroidClase 1 Programacion Android
Clase 1 Programacion Android
Ernesto Freyre Gonzalez
 
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidTutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidLuis Ernesto Castillo Alfaro
 
Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5
Carlos Blanco
 
Introduccion a Android
Introduccion a AndroidIntroduccion a Android
Introduccion a Android
Paradigma Digital
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
Alberto Ruibal
 
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con AndroidTutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con AndroidLuis Ernesto Castillo Alfaro
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
GDG Cali
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
Alberto Ruibal
 
Encuentro Linux 2011
Encuentro Linux 2011Encuentro Linux 2011
Encuentro Linux 2011
Felipe Hernández Rivas
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
Gabriela Bosetti
 
Ajax Huancayo
Ajax HuancayoAjax Huancayo
Ajax Huancayo
Jonathan Lara Vasquez
 
Taller cognitive services en contenedores locales
Taller cognitive services en contenedores localesTaller cognitive services en contenedores locales
Taller cognitive services en contenedores locales
Luis Beltran
 
IOF Labs Weekend - Android (27082011)
IOF Labs Weekend - Android (27082011)IOF Labs Weekend - Android (27082011)
IOF Labs Weekend - Android (27082011)
repcax
 

Similar a Android Bootcamp - GTUG Uruguay (20)

Android
AndroidAndroid
Android
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
 
Clase 1 Programacion Android
Clase 1 Programacion AndroidClase 1 Programacion Android
Clase 1 Programacion Android
 
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con AndroidTutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
Tutorial Nro 1 de Desarrollo de Aplicaciones Móviles con Android
 
Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5Carlos blanco resumen mm android controles 10pag v5
Carlos blanco resumen mm android controles 10pag v5
 
Introduccion a Android
Introduccion a AndroidIntroduccion a Android
Introduccion a Android
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con AndroidTutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
Tutorial Nro. 2 de Desarollo de Aplicaciones Móviles con Android
 
Introducción a Python
Introducción a PythonIntroducción a Python
Introducción a Python
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
 
Manual marichuy
Manual marichuyManual marichuy
Manual marichuy
 
Manual marichuy
Manual marichuyManual marichuy
Manual marichuy
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Encuentro Linux 2011
Encuentro Linux 2011Encuentro Linux 2011
Encuentro Linux 2011
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Ajax Huancayo
Ajax HuancayoAjax Huancayo
Ajax Huancayo
 
Javascript
JavascriptJavascript
Javascript
 
Taller cognitive services en contenedores locales
Taller cognitive services en contenedores localesTaller cognitive services en contenedores locales
Taller cognitive services en contenedores locales
 
IOF Labs Weekend - Android (27082011)
IOF Labs Weekend - Android (27082011)IOF Labs Weekend - Android (27082011)
IOF Labs Weekend - Android (27082011)
 
Javascript
JavascriptJavascript
Javascript
 

Último

(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
durangense277
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
rafaelsalazar0615
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 

Último (20)

(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
Ventajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloroVentajas y desventajas de la desinfección con cloro
Ventajas y desventajas de la desinfección con cloro
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Diagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestreDiagrama de flujo soporte técnico 5to semestre
Diagrama de flujo soporte técnico 5to semestre
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 

Android Bootcamp - GTUG Uruguay

  • 1. Mi primera Aplicación Android ¡¡¡Bienvenidos!!! Setiembre 2011 Gabriel Kouyoumdjian Gabriel Olivera
  • 2. GTUGs: Google Tecnology User Groups Android, AppEngine, APIs de productos, developer tools, proyectos open source  267 #capítulos (activos + incubando) 545 #eventos en los últimos seis meses En Uruguay: uy-gtug.org
  • 3. ¿Por qué un Bootcamp de Android?
  • 4. Cantidad estimada de Dispositivos con Android activados por d ía
  • 5. Evolución de la Aplicaciones móviles disponibles en las principales tiendas
  • 6.  
  • 7.  
  • 10.
  • 11. Instalación del Plugin ADT En Eclipse: Help -> Install New Software.... -> Add Name: Android Plugin Archivo: ADT-12.0.0.zip (en la carpeta BOOTCAMP) [x] Developer Tools [ ] DESMARCAR &quot;Check all update sites...&quot; Next, next, next....., restart.
  • 12. Configurar Ubicación de la SDK En Eclipse: Preferences -> Android SDK Location: BOOTCAMP/android-sdk.../ Click en &quot;Apply&quot; Click en &quot;OK&quot;
  • 13. Crear un nuevo Emulador Window -> AVD Manager -> Virtual Devices->New Name: MyAVD Target: Android 2.1 Resolution/Built-In: HVGA Create AVD Close
  • 14. Proyecto Hello World File -> New -> Android Project Project Name:   Hello World Build Target: Android 2.1 Properties:   Application Name:  Hello World   Package Name:  com.example.helloworld   Create Activity:  HelloActivity
  • 15. src/com/example/HelloActivity.java - onCreate() - Bundle savedInstanceState - setContentView(R.layout.main);
  • 16. El ciclo de vida de una Aplicación Android
  • 17. res/layout/main.xml Definir el layout de la Actividad (Activity)
  • 19. res/layout/main.xml android:orientation=&quot;vertical&quot; android:layout_width / android:layout_height &quot;fill_parent&quot; &quot;wrap_content&quot; &quot;@string/hello&quot;
  • 20. res/values/strings.xml Cadenas de caracteres que serán utilizadas por la aplicación
  • 21. Prueba Project -> Run (Ctrl + Shift + F11)
  • 22. Ejemplo de una Actividad
  • 23. Hello World no está mal pero… ¿no es un poco básico?
  • 25. Crear res/layout/list_item.xml [1] <? xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> < TextView xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; android:padding = &quot;10dp&quot; android:textSize = &quot;16sp&quot; > </ TextView > Definir el layout de cada elemento de la lista
  • 26. Modificar res/layout/main.xml [2] <? xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> < LinearLayout xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:orientation = &quot;vertical&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; > < ListView android:id = &quot;@+id/mylistview&quot;   android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; /> </ LinearLayout >
  • 27. HelloActivity.java [3] public class HelloActivity extends Activity implements OnItemClickListener {   static final String[] COUNTRIES = { &quot;Uruguay&quot; ,               &quot;Argentina&quot; , &quot;Brasil&quot; };   @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(); }
  • 28. Prueba Project -> Run (Ctrl + Shift + F11)
  • 29. Editar Texto y botón para Agregar
  • 30. Modificar main.xml [4] <? xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ?> < LinearLayout xmlns:android = &quot;http://schemas.android.com/apk/res/android&quot; android:orientation = &quot;vertical&quot; android:layout_width = &quot;fill_parent&quot; android:layout_height = &quot;fill_parent&quot; >      < LinearLayout          android:layout_width = &quot;fill_parent&quot;          android:layout_height = &quot;wrap_content&quot;          android:orientation = &quot;horizontal&quot; >          < EditText               android:id = &quot;@+id/mytextview&quot;              android:layout_width = &quot;200sp&quot;              android:layout_height = &quot;wrap_content&quot;              android:text = &quot;&quot; />          < Button                android:id = &quot;@+id/mybutton&quot;              android:layout_width = &quot;wrap_content&quot;              android:layout_height = &quot;wrap_content&quot;              android:text = &quot;Agregar&quot; />      </ LinearLayout >      < ListView          android:id = &quot;@+id/mylistview&quot;          android:layout_width = &quot;fill_parent&quot;          android:layout_height = &quot;fill_parent&quot; /> </ LinearLayout >
  • 31. Prueba Project -> Run (Ctrl + Shift + F11)
  • 33. 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( &quot;Uruguay&quot; );          countries .add( “Argentina&quot; ); countries .add( “Brasil&quot; ); countries .add( “Chile&quot; ); countries .add( “Mexico&quot; ); 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 ); } ...
  • 34. ... 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(); }
  • 35. Prueba Project -> Run (Ctrl + Shift + F11)
  • 36. Experimento Cerrar la Aplicación (presionando &quot;Home&quot;) Iniciar nuevamente a partir del menú de aplicaciones. ¿Cuál es el resultado?
  • 37. Resultado El contenido continúa en la lista. ¿Por qué sucede esto?
  • 38. Experimento Porque  Android hace lo que llamamos &quot;Activity Lifecycle Management&quot; ...y puede mantener activas o cerrar las Activities de acuerdo a las necesidades
  • 39. Experimento 2 Cerrar la aplicación (presionando &quot;Home&quot;) Forzar el cierre de la aplicación a través del menú Menu -> Manage Apps -> Hello World -> Force Stop Iniciar nuevamente a partir del menú de aplicaciones. ¿Cuál es el resultado esta vez?
  • 40. Resultado El Contenido de la lista desapareció
  • 41. Persistencia Fácil -> SharedPreferences Completo -> SQLite
  • 42. Fácil -> SharedPreferences Completo -> Base de datos SQLite
  • 43. SharedPreferences SharedPreferences sp = getPreferences(MODE_PRIVATE); Leer: String x = sp.getString(&quot;key&quot;, &quot;defaultvalue&quot;); Escribir: SharedPreferences.Editor spe = sp.edit(); spe.putString(&quot;key&quot;, &quot;value&quot;); spe.commit();
  • 44. 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) ? &quot;&quot; : &quot;;&quot; )              + countries .get(i));      spe.putString( &quot;countries&quot; , sb.toString());      spe.commit(); } void loadData() {      SharedPreferences sp =                   getPreferences( MODE_PRIVATE );      String countryList =      sp.getString( &quot;countries&quot; ,          &quot;Uruguay;Argentina;Brasil;Chile;Mexico&quot; );      for (String country : countryList.split( &quot;;&quot; ))          countries .add(country); }
  • 45. 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 ); }
  • 46. HelloActivity.java [6] public void onClick(View view) {      EditText et = (EditText)      findViewById(R.id. mytextview );      countries .add(et.getText().toString());      adapter .notifyDataSetChanged();      saveData(); }
  • 47. Prueba Project -> Run (Ctrl + Shift + F11)
  • 48. El &quot;Toast&quot; que aparece al hacer click en la lista tampoco está muy bueno... ¿Cómo se pode implementar una búsqueda en la Web en vez del Toast?
  • 49. ... HelloActivity.java [7] public void onItemClick(AdapterView<?> parent,       View view, int pos, long id) {      Uri uri = Uri.parse(&quot; http :// www.google.com/search?hl=en&q= &quot; + Uri.encode(countries.get(pos), null) + &quot;&btnI= &quot; + Uri.encode(&quot;I'm Feeling Lucky&quot;));      Intent intent = new Intent(      Intent. ACTION_VIEW , uri);      startActivity(intent); }
  • 50. Referencias: Elaborado (con adaptaciones) a partir de los tutoriales: http://developer.android.com/resources/tutorials/hello-world.html http://developer.android.com/resources/tutorials/views/index.html
  • 51. ¡Gracias! ¡¡¡Hasta la próxima!!! Gabriel Kouyoumdjian (gabriel.kb@gtugs.org) Gabriel Olivera (gabriel.olivera@gtugs.org)

Notas del editor

  1. Install (Unzip) SDK Configure Ecipse with SDK location Download Android platforms
  2. Install (Unzip) SDK Configure Ecipse with SDK location Download Android platforms
  3. onCreate()   Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc. This method also provides you with a Bundle containing the activity&apos;s previously frozen state, if there was one. Always followed by onStart(). setContentView():  Set the activity content to an explicit view. This view is placed directly into the activity&apos;s view hierarchy. It can itself be a complex view hierarchy. link to http://developer.android.com/images/activity_lifecycle.png?
  4. fill_parent :  means that the view wants to be as big as its parent (minus padding) wrap_content : means that the view wants to be just big enough to enclose its content (plus padding) String Resources: In Java: R.string. string_name In XML:@string/ string_name
  5. dp:  Density-independent Pixels - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Note: The compiler accepts both &amp;quot;dip&amp;quot; and &amp;quot;dp&amp;quot;, though &amp;quot;dp&amp;quot; is more consistent with &amp;quot;sp&amp;quot;. sp:  Scale-independent Pixels - this is like the dp unit, but it is also scaled by the user&apos;s font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user&apos;s preference.
  6. @+id/  means that we are creating this id in the namespace of our application 
  7. R.id.mylistview  references entity declared on Resource file Toast:  A toast is a view containing a quick little message for the user. The toast class helps you create and show those. ArrayAdapter:  A concrete BaseAdapter that is backed by an array of arbitrary objects. By default this class expects that the provided resource id references a single TextView. If you want to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource.
  8. Note that the width of EditText is defined in sp
  9. ?
  10. getPreferences() :  Retrieve a  SharedPreferences  object for accessing preferences that are private to this activity. MODE_PRIVATE : File creation mode: the default mode, where the created file can only be accessed by the calling application (or all applications sharing the same user ID).  MODE_WORLD_READABLE:  File creation mode: allow all other applications to have read access to the created file  MODE_WORLD_WRITABLE:  File creation mode: allow all other applications to have write access to the created file.
  11. Second argument in  sp.getString(&amp;quot;countries&amp;quot;, &amp;quot;Brazil;Argentina;Mexico&amp;quot;);  is the default value
  12. Intent:  An intent is an abstract description of an operation to be performed. An Intent provides a facility for performing late runtime binding between the code in different applications. Its most significant use is in the launching of activities, where it can be thought of as the glue between activities. It is basically a passive data structure holding an abstract description of an action to be performed. The primary pieces of information in an intent are: action -- The general action to be performed, such as  ACTION_VIEW ,  ACTION_EDIT ,  ACTION_MAIN , etc. data -- The data to operate on, such as a person record in the contacts database, expressed as a  Uri .