SlideShare una empresa de Scribd logo
1 de 258
Descargar para leer sin conexión
Manual Básico
Android Studio
=-·
----·--------·-·
- e...;:.:z;.:;..
��=
��=;:::=....._
- 1 -
ÍNDICE
1 -Instalación de las herramientas necesarias para
programar para Android Studio
2 -Pasos para crear el primer proyecto Android Studio
3 -Capturar el clic de un botón
4 -Controles RadioGroup y RadioButton
5 -Control CheckBox
6 -Control Spinner
7 -Control ListView (con una lista de String)
8 -Control ImageButton
9 -Notificaciones sencillas mediante la clase Toast
10 -Control EditText
11 -Lanzar un segundo "Activity"
12 -Lanzar un segundo "Activity" y pasar parámetros
13 -Almacenamiento de datos mediante la clase SharedPreferences
14 -Almacenamiento de datos en un archivo de texto en la memoria interna
15 -Almacenamiento de datos en un archivo de texto
localizado en una tarjeta SD
16 -Almacenamiento en una base de datos SQLite
17 -Instalación del programa Android en un dispositivo real
18 -Layout (LinearLayout)
19 -Layout (TableLayout)
20 -Layout (FrameLayout)
21 -Layout (ScrollView y LinearLayout)
22 -Icono de la aplicación
23 -Reproducción de audio (archivo contenido en la aplicación)
24 -Reproducción, pausa, continuación y detención de un archivo de audio.
25 -Reproducción de audio (archivo contenido en una tarjeta SD)
26 -Reproducción de audio (archivo localizado en internet)
27 -Reproducción de audio utilizando el reproductor
propio de Android (vía Intent)
28 -Grabación de audio mediante el grabador
provisto por Android (via Intent)
29 - Captura de audio mediante la clase MediaRecorder
- 2 -
30 - Dibujar: graficar un píxel
31 - Dibujar: pintar fondo y dibujar líneas
32 - Dibujar: rectángulos
33 - Dibujar: círculos
34 - Dibujar: óvalos
35 - Dibujar: texto
36 - Dibujar: texto con fuentes externas
37 - Dibujar: texto sobre un camino
38 - Dibujar: una imagen
39 - Evento touch: dibujar un círculo
40 - Evento touch: juego del buscaminas
41 - Archivo strings.xml
42 - Internacionalización y archivo strings.xml
43 - Localización y archivo strings.xml
44 - Componente ActionBar (Básica)
45 - Componente ActionBar (Botones de acción)
46 - Componente ActionBar (Ocultarlo y mostrarlo)
- 3 -
1 - Instalación de las herramientas necesarias
para programar para Android Studio
Descarga de herramientas necesarios para
programar para Android con el Android Studio
1 - Primero debemos instalar el compilador de Java y la máquina virtual. Estas
herramientas las podemos descargar de:
Java SE Development Kit (JDK).
2 - El segundo paso es la descarga del Android Studio (que contiene todo lo necesario
para comenzar el desarrollo de aplicaciones en Android), lo hacemos del sitio :
Android SDK.
Ahora procedemos a su instalación en el equipo ejecutando el archivo que acabamos de
descargar:
l =I
Welcome to the Android Studio
Setup
Setup will guide you through the installation of Android
Studio.
It is recommended that you dose ali other applications.
before starting Setup. This 'NiTI make it possible to update
relevant sys.tem files '11.'ithout having to reboot your
computer.
Click Next to co.ntinue.
Next> 'Cancel
Dejamos por defecto para que instale el Android Studio, el Android SDK, Android Virtual
Device etc.:
- 4 -
- 5 -
- 6 -
- 7 -
- 8 -
- 9 -
- 10 -
- 11 -
- 12 -
- 13 -
- 14 -
- 15 -
- 16 -
- 17 -
- 18 -
- 19 -
- 20 -
- 21 -
- 22 -
- 23 -
- 24 -
- 25 -
- 26 -
- 27 -
- 28 -
- 29 -
- 30 -
- 31 -
- 32 -
- 33 -
- 34 -
- 35 -
- 36 -
- 37 -
- 38 -
- 39 -
- 40 -
- 41 -
- 42 -
e MainActivity.java X : activity_main.xml X m.....�����������������������
Palette -1:t- !- [l- lii!J Nexus 4- B- (J)AppTheme
[IIJ Linearlayout (Horizontal)
§ Linearlayout (Vertical]
� Tablelayout
!§j TableRow
In] Gridlayout
Q!j Relativelayout
1::J Wi<l9ets
� Plain TextView
�Large Text
� Mediurn Text
�Small Text
e� Button
o, Small Button
@ RadioButton
0CheckBox
Switch
- ToggleButton
ImageButton
ImageView
ProgressBar (Large)
- ProgressBar (Normal)
- ProgressBar (Small)
- ProgressBar (Horizontal)
101 SeekBar
RatingBar
:�1Spinner
�JWebView
l::J Text Fields
[] Plain Text
[] Person Name
[] Password
[] Password (Nurneric)
[] E-mail
"""MainActivity-
lngréS� prime ral(l-1
ln�rese segundo valor
11em1
�l>llffl'II
1 OPE�R i
r�ul1.1do
<J o n
Component Tree ]: � 1 -O· _.! �
�T-!!ll"D• ev-ic•e •Sc
•re•e •n
______"'-I �
[g Relativelayout �-
a� tvl (TextView) - "Ingrese pn
í[J editlext
[iill tv2 (TextView) - "Ingrese se :¡;'
[) et2 (EditText) �
. .=spmner
�..º button - 'operar"
�
[iill tv3 (TextView) - "resultado" 3
Properties ? !> T
layout:height match_parent
style
accessibilityliveR
alpha
background
backgroundTint
backgroundTint�
clickable o
contentDescriptic
elevation
focusable o
focusablelnToud O
No olvidemos inicializar la propiedad onClick del objeto button con el valor "operar" (dicho nombre es el método que
debemos implementar)
Código fuente:
package ar.com.tutorialesya.proyecto005;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.Menultem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private Spinner spinnerl;
private EditText etl,et2;
private TextView tv3;
@Override
protected void onCreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setContentView(R.layout.activity_main);
etl=(EditText)findViewByid(R.id.etl);
et2=(EditText)findViewByid(R.id.et2);
tv3=(TextView)findViewByid(R.id.tv3);
spinnerl = (Spinner) findViewByid(R.id.spinner);
String []opciones={"sumar","restar","multiplicar","dividir"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android .layout
.simple_spinner_item, opciones);
- 43 -
- 44 -
- 45 -
- 46 -
public class MainActivity extends ActionBarActivity {
private String[] paises = { "Argentina", "Chile", "Paraguay", "Bolivia",
"Peru", "Ecuador", "Brasil", "Colombia", "Venezuela", "Uruguay"
private String[] habitantes= { "40000000", "17000000", "6500000",
"10000000", "30000000", "14000000", "183000000", "44000000",
"29000000", "3500000" };
private TextView tvl;
private ListView lvl;
@Override
protected void onCreate(Bundle savedinstanceState)
super.onCreate(savedinstanceState);
setContentView(R.layout.activity_main);
tvl=(TextView)findViewByid(R.id.tvl);
lvl= (ListView)findViewByid(R.id.listView);
ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.lR.layout
.simple_list_item_1, paises);
lvl.setAdapter(adapter); !
lvl.setOnitemClickListener(new AdapterView.OnitemClickListener() 1
@Override i
public void onitemClick(AdapterView parent, View view, int posit�on, long id) {
tvl.setText("Población de "+ lvl.getitemAtPosition(position) !+ " es "+
habitantes[position]);
) ) ;
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is
getMenuinflater().inflate(R.menu.menu_main, menu);
presJ,nt.
return true;
@Override
public boolean onOptionsitemSelected(Menuitem item)
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getltemld();
//noinspection SimplifiableifStatement
if (id== R.id.action settings) {
return true;
return super.onOptionsitemSelected(item);
.....................____ ...................................................___ ............................!
Primero definimos dos vectores paralelos donde almacenamos en uno los nombres de países y en el otro almacenamos
la cantidad de habitantes de dichos países:
private String[] paises={"Argentina","Chile","Paraguay","Bolivia","Peru",
"Ecuador","Brasil","Colombia","Venezuela","Uruguay"};
private String[] habitantes={"40000000","17000000","6500000","10000000","30000000",
"14000000","183000000","44000000","29000000","3500000"};
Definimos un objeto de tipo TextView y otro de tipo ListView donde almacenaremos las referencias a los objetos que
definimos en el archivo XML:
private TextView tvl;
private ListView lvl;
En el método onCreate obtenemos la referencia a los dos objetos:
tvl=(TextView)findViewByid(R.id.tvl);
lvl =(ListView)findViewByid(R.id.listView);
- 47 -
- 48 -
- 49 -
- 50 -
- 51 -
- 52 -
- 53 -
- 54 -
- 55 -
- 56 -
- 57 -
- 58 -
- 59 -
- 60 -
- 61 -
- 62 -
- 63 -
- 64 -
- 65 -
- 66 -
- 67 -
- 68 -
- 69 -
- 70 -
- 71 -
- 72 -
- 73 -
- 74 -
- 75 -
- 76 -
- 77 -
- 78 -
- 79 -
- 80 -
- 81 -
- 82 -
- 83 -
- 84 -
- 85 -
- 86 -
! )
public boolean onCreateOptionsMenu(Menu menu) ¡
// Inflate the menu; this adds items to the action bar if it is pres�nt.
getMenuinflater().inflate(R.menu.menu_main, menu);
return true;
@Override
public boolean onOptionsitemSelected(Menuitem item)
!/ Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getitemid();
//noinspection SimplifiableifStatement
if (id == R.id.action_settings) {
return true;
return super.onOptionsitemSelected(item);
public void grabar(View v)
String nombre=etl.getText().toString();
String datos=et2.getText().toString();
SharedPreferences preferencias=getSharedPreferences("agenda",
SharedPreferences.Editor editor=preferencias.edit();
editor.putString(nombre, datos);
ContexJ.MODE Pf
editor.commit();
Toast.makeText(this,"Datos grabados",Toast.LENGTH_LONG).show();
public void recuperar{View v)
String nombre=etl.getText().toString();
SharedPreferences prefe=getSharedPreferences("agenda",
String d=prefe.getString(nombre, "");
Context.MODE JRIVATE);
if (d.length()==O) {
Toast.makeText(this,"No existe dicho nombre en la
!
agenda",Toast.LENGTH_LC
else {
et2.setText(d);
Definimos dos objetos de la clase EditText donde se ingresan el nombre de la persona y los datos de dicha persona:
prívate EditText etl,et2;
Cuando se presiona el botón grabar:
public void grabar(View v) {
}
String nombre=etl.getText().toString();
String datos=et2.getText().toString();
SharedPreferences preferencias=getSharedPreferences("agenda", Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferencias.edit();
editor.putString(nombre, datos);
editor.commit();
Toast.makeText(this,"Datos grabados",Toast.LENGTH_LONG).show();
Extraemos los dos datos de los EditText, creamos un objeto de la clas SharedPReferences con el nombre de "agenda".
Creamos un objeto de la clase Editor y procedemos a grabar en el archivo de preferencias mediante putString:
editor.putString(nombre, datos);
Significa que en el archivo de preferencias se almacena una entrada con el nombre de la persona y los datos de dicha
persona.
Por otro lado tenemos la lógica para recuperar los datos de una persona de la agenda:
public void recuperar(View v) {
String nombre=etl.getText().toString();
- 87 -
- 88 -
- 89 -
- 90 -
- 91 -
- 92 -
- 93 -
- 94 -
- 95 -
- 96 -
- 97 -
- 98 -
- 99 -
- 100 -
- 101 -
- 102 -
- 103 -
- 104 -
- 105 -
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class MainActivity extends ActionBarActivity {
private EditText et1,et2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.editText);
et2=(EditText)findViewById(R.id.editText2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void grabar(View v) {
String nomarchivo = et1.getText().toString();
String contenido = et2.getText().toString();
try {
- 106 -
File tarjeta = Environment.getExternalStorageDirectory();
Toast.makeText(this,tarjeta.getAbsolutePath(),Toast.LENGTH_LONG).show();
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(file));
osw.write(contenido);
osw.flush();
osw.close();
Toast.makeText(this, "Los datos fueron grabados correctamente",
Toast.LENGTH_SHORT).show();
et1.setText("");
et2.setText("");
} catch (IOException ioe) {
Toast.makeText(this, "No se pudo grabar",
Toast.LENGTH_SHORT).show();
}
}
public void recuperar(View v) {
String nomarchivo = et1.getText().toString();
File tarjeta = Environment.getExternalStorageDirectory();
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
try {
FileInputStream fIn = new FileInputStream(file);
InputStreamReader archivo = new InputStreamReader(fIn);
BufferedReader br = new BufferedReader(archivo);
String linea = br.readLine();
String todo = "";
while (linea != null) {
todo = todo + linea + " ";
linea = br.readLine();
}
br.close();
archivo.close();
et2.setText(todo);
} catch (IOException e) {
Toast.makeText(this, "No se pudo leer",
Toast.LENGTH_SHORT).show();
}
}
}
El método para grabar los datos en un archivo de texto localizado en una tarjeta SD comienza obteniendo
el directorio raiz de la tarjeta a través del método getExternalStorageDirectory(), el mismo retorna un
objeto de la clase File.
public void grabar(View v) {
String nomarchivo = et1.getText().toString();
String contenido=et2.getText().toString();
try
{
File tarjeta = Environment.getExternalStorageDirectory();
- 107 -
Creamos un nuevo objeto de la clase File indicando el camino de la unidad SD y el nombre del archivo a
crear:
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
Por último similar al acceso de un archivo interno creamos un objeto de la clase OutputStreamWriter:
OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream(file));
Grabamos el contenido del EditText:
osw.write(contenido);
Cerramos el archivo:
osw.flush();
osw.close();
Toast.makeText(this,"Los datos fueron grabados
correctamente",Toast.LENGTH_SHORT).show();
et1.setText("");
et2.setText("");
}
catch (IOException ioe)
{
Toast.makeText(this, "No se pudo grabar",
Toast.LENGTH_SHORT).show();
}
}
Para la lectura del archivo nuevamente obtenemos la referencia de la tarjeta SD para obtener el path de la
unidad de almacenamiento, el resto del algoritmo es similar al visto con un archivo interno:
public void recuperar(View v) {
String nomarchivo = et1.getText().toString();
File tarjeta = Environment.getExternalStorageDirectory();
File file = new File(tarjeta.getAbsolutePath(), nomarchivo);
try {
FileInputStream fIn = new FileInputStream(file);
InputStreamReader archivo=new InputStreamReader(fIn);
BufferedReader br=new BufferedReader(archivo);
String linea=br.readLine();
String todo="";
while (linea!=null)
{
todo=todo+linea+"n";
linea=br.readLine();
}
br.close();
archivo.close();
et2.setText(todo);
} catch (IOException e)
{
Toast.makeText(this, "No se pudo leer",
Toast.LENGTH_SHORT).show();
}
}
Este proyecto lo puede descargar en un zip desde este enlace: proyecto018.zip
- 108 -
Importante.
Si lo probamos con el emulador del Nexus 5 en el Android Studio cuando tratemos de grabar nos mostrará la
notificación "No se pudo grabar", esto debido a que dicho celular no permite extender la memoria mediante
tarjetas sd.
La solución para probar es crear otro dispositivo virtual. Los pasos para crear otro dispositivo virtual en
Android Studio son los siguientes:
1 - Desde el menú de opciones del Android Studio accedemos a Tools->Android->AVD Manager.
2 - Aparece un diálogo con todas las máquinas virtuales creadas hasta el momento (en las primeras versiones
de Android Studio crea una máquina virtual para el Nexus 5)
Presionamos el botón "Create Virtual Device".
- 109 -
- 110 -
- 111 -
- 112 -
- 113 -
- 114 -
- 115 -
- 116 -
- 117 -
- 118 -
- 119 -
- 120 -
- 121 -
- 122 -
- 123 -
- 124 -
- 125 -
- 126 -
- 127 -
- 128 -
- 129 -
- 130 -
- 131 -
- 132 -
- 133 -
- 134 -
- 135 -
- 136 -
- 137 -
- 138 -
- 139 -
- 140 -
- 141 -
- 142 -
- 143 -
- 144 -
- 145 -
- 146 -
- 147 -
- 148 -
- 149 -
- 150 -
- 151 -
- 152 -
- 153 -
- 154 -
- 155 -
- 156 -
- 157 -
- 158 -
- 159 -
- 160 -
- 161 -
- 162 -
- 163 -
- 164 -
- 165 -
- 166 -
- 167 -
- 168 -
- 169 -
- 170 -
- 171 -
- 172 -
- 173 -
- 174 -
- 175 -
- 176 -
- 177 -
- 178 -
- 179 -
- 180 -
- 181 -
- 182 -
- 183 -
- 184 -
- 185 -
- 186 -
- 187 -
- 188 -
- 189 -
- 190 -
- 191 -
- 192 -
- 193 -
- 194 -
- 195 -
- 196 -
- 197 -
- 198 -
- 199 -
- 200 -
- 201 -
- 202 -
- 203 -
- 204 -
- 205 -
- 206 -
- 207 -
- 208 -
- 209 -
- 210 -
- 211 -
- 212 -
- 213 -
- 214 -
- 215 -
- 216 -
- 217 -
- 218 -
- 219 -
- 220 -
- 221 -
- 222 -
- 223 -
- 224 -
- 225 -
- 226 -
- 227 -
- 228 -
- 229 -
- 230 -
- 231 -
- 232 -
- 233 -
- 234 -
- 235 -
- 236 -
- 237 -
- 238 -
- 239 -
- 240 -
- 241 -
- 242 -
- 243 -
- 244 -
- 245 -
- 246 -
- 247 -
- 248 -
- 249 -
- 250 -
- 251 -
- 252 -
- 253 -
- 254 -
- 255 -
- 256 -
- 257 -
- 258 -

Más contenido relacionado

La actualidad más candente (7)

Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collections
 
Unidad iii pilas y colas
Unidad iii pilas y colasUnidad iii pilas y colas
Unidad iii pilas y colas
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Charla Mysql
Charla MysqlCharla Mysql
Charla Mysql
 
Clase 6 objetos de javaScript
Clase 6 objetos de javaScriptClase 6 objetos de javaScript
Clase 6 objetos de javaScript
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Comandos r
Comandos rComandos r
Comandos r
 

Similar a Manual de android

Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterAdolfo Sanz De Diego
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de AndroidGDG Cali
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio AndroidGDG Cali
 
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
 
Introducción a Qt
Introducción a QtIntroducción a Qt
Introducción a Qtdgalo88
 
Prueba regresion lineal
Prueba regresion linealPrueba regresion lineal
Prueba regresion linealThe Killer
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguaygtuguruguay
 
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015Joan Fuentes Hernandez
 
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
 
Formatos tutoria laboratorio
Formatos tutoria laboratorioFormatos tutoria laboratorio
Formatos tutoria laboratorioJeffersonVega16
 
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 6Gabriela Bosetti
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5Plain Concepts
 
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
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDKFe
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndkBarcelona GTUG
 

Similar a Manual de android (20)

Android bootcamp 101 v2.0
Android bootcamp 101 v2.0Android bootcamp 101 v2.0
Android bootcamp 101 v2.0
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Segundo laboratorio de Android
Segundo laboratorio de AndroidSegundo laboratorio de Android
Segundo laboratorio de Android
 
Primera App - Laboratorio Android
Primera App - Laboratorio AndroidPrimera App - Laboratorio Android
Primera App - Laboratorio Android
 
Java tema06a
Java tema06aJava tema06a
Java tema06a
 
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
 
Introducción a Qt
Introducción a QtIntroducción a Qt
Introducción a Qt
 
Prueba regresion lineal
Prueba regresion linealPrueba regresion lineal
Prueba regresion lineal
 
Clase 1 Programacion Android
Clase 1 Programacion AndroidClase 1 Programacion Android
Clase 1 Programacion Android
 
12.gráficos y bases de datos
12.gráficos y bases de datos12.gráficos y bases de datos
12.gráficos y bases de datos
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguay
 
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015
Presentación de Android Wear impartida en el GDG Devfest Barcelona 2015
 
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...
 
Formatos tutoria laboratorio
Formatos tutoria laboratorioFormatos tutoria laboratorio
Formatos tutoria laboratorio
 
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
 
Vector
Vector Vector
Vector
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5
 
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"
 
Introducción Android NDK
Introducción Android NDKIntroducción Android NDK
Introducción Android NDK
 
Introducción android ndk
Introducción android ndkIntroducción android ndk
Introducción android ndk
 

Último

Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 

Último (20)

Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 

Manual de android

  • 1. Manual Básico Android Studio =-· ----·--------·-· - e...;:.:z;.:;.. ��= ��=;:::=....._ - 1 -
  • 2. ÍNDICE 1 -Instalación de las herramientas necesarias para programar para Android Studio 2 -Pasos para crear el primer proyecto Android Studio 3 -Capturar el clic de un botón 4 -Controles RadioGroup y RadioButton 5 -Control CheckBox 6 -Control Spinner 7 -Control ListView (con una lista de String) 8 -Control ImageButton 9 -Notificaciones sencillas mediante la clase Toast 10 -Control EditText 11 -Lanzar un segundo "Activity" 12 -Lanzar un segundo "Activity" y pasar parámetros 13 -Almacenamiento de datos mediante la clase SharedPreferences 14 -Almacenamiento de datos en un archivo de texto en la memoria interna 15 -Almacenamiento de datos en un archivo de texto localizado en una tarjeta SD 16 -Almacenamiento en una base de datos SQLite 17 -Instalación del programa Android en un dispositivo real 18 -Layout (LinearLayout) 19 -Layout (TableLayout) 20 -Layout (FrameLayout) 21 -Layout (ScrollView y LinearLayout) 22 -Icono de la aplicación 23 -Reproducción de audio (archivo contenido en la aplicación) 24 -Reproducción, pausa, continuación y detención de un archivo de audio. 25 -Reproducción de audio (archivo contenido en una tarjeta SD) 26 -Reproducción de audio (archivo localizado en internet) 27 -Reproducción de audio utilizando el reproductor propio de Android (vía Intent) 28 -Grabación de audio mediante el grabador provisto por Android (via Intent) 29 - Captura de audio mediante la clase MediaRecorder - 2 -
  • 3. 30 - Dibujar: graficar un píxel 31 - Dibujar: pintar fondo y dibujar líneas 32 - Dibujar: rectángulos 33 - Dibujar: círculos 34 - Dibujar: óvalos 35 - Dibujar: texto 36 - Dibujar: texto con fuentes externas 37 - Dibujar: texto sobre un camino 38 - Dibujar: una imagen 39 - Evento touch: dibujar un círculo 40 - Evento touch: juego del buscaminas 41 - Archivo strings.xml 42 - Internacionalización y archivo strings.xml 43 - Localización y archivo strings.xml 44 - Componente ActionBar (Básica) 45 - Componente ActionBar (Botones de acción) 46 - Componente ActionBar (Ocultarlo y mostrarlo) - 3 -
  • 4. 1 - Instalación de las herramientas necesarias para programar para Android Studio Descarga de herramientas necesarios para programar para Android con el Android Studio 1 - Primero debemos instalar el compilador de Java y la máquina virtual. Estas herramientas las podemos descargar de: Java SE Development Kit (JDK). 2 - El segundo paso es la descarga del Android Studio (que contiene todo lo necesario para comenzar el desarrollo de aplicaciones en Android), lo hacemos del sitio : Android SDK. Ahora procedemos a su instalación en el equipo ejecutando el archivo que acabamos de descargar: l =I Welcome to the Android Studio Setup Setup will guide you through the installation of Android Studio. It is recommended that you dose ali other applications. before starting Setup. This 'NiTI make it possible to update relevant sys.tem files '11.'ithout having to reboot your computer. Click Next to co.ntinue. Next> 'Cancel Dejamos por defecto para que instale el Android Studio, el Android SDK, Android Virtual Device etc.: - 4 -
  • 43. e MainActivity.java X : activity_main.xml X m.....����������������������� Palette -1:t- !- [l- lii!J Nexus 4- B- (J)AppTheme [IIJ Linearlayout (Horizontal) § Linearlayout (Vertical] � Tablelayout !§j TableRow In] Gridlayout Q!j Relativelayout 1::J Wi<l9ets � Plain TextView �Large Text � Mediurn Text �Small Text e� Button o, Small Button @ RadioButton 0CheckBox Switch - ToggleButton ImageButton ImageView ProgressBar (Large) - ProgressBar (Normal) - ProgressBar (Small) - ProgressBar (Horizontal) 101 SeekBar RatingBar :�1Spinner �JWebView l::J Text Fields [] Plain Text [] Person Name [] Password [] Password (Nurneric) [] E-mail """MainActivity- lngréS� prime ral(l-1 ln�rese segundo valor 11em1 �l>llffl'II 1 OPE�R i r�ul1.1do <J o n Component Tree ]: � 1 -O· _.! � �T-!!ll"D• ev-ic•e •Sc •re•e •n ______"'-I � [g Relativelayout �- a� tvl (TextView) - "Ingrese pn í[J editlext [iill tv2 (TextView) - "Ingrese se :¡;' [) et2 (EditText) � . .=spmner �..º button - 'operar" � [iill tv3 (TextView) - "resultado" 3 Properties ? !> T layout:height match_parent style accessibilityliveR alpha background backgroundTint backgroundTint� clickable o contentDescriptic elevation focusable o focusablelnToud O No olvidemos inicializar la propiedad onClick del objeto button con el valor "operar" (dicho nombre es el método que debemos implementar) Código fuente: package ar.com.tutorialesya.proyecto005; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.Menultem; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends ActionBarActivity { private Spinner spinnerl; private EditText etl,et2; private TextView tv3; @Override protected void onCreate(Bundle savedinstanceState) super.onCreate(savedinstanceState); setContentView(R.layout.activity_main); etl=(EditText)findViewByid(R.id.etl); et2=(EditText)findViewByid(R.id.et2); tv3=(TextView)findViewByid(R.id.tv3); spinnerl = (Spinner) findViewByid(R.id.spinner); String []opciones={"sumar","restar","multiplicar","dividir"}; ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android .layout .simple_spinner_item, opciones); - 43 -
  • 47. public class MainActivity extends ActionBarActivity { private String[] paises = { "Argentina", "Chile", "Paraguay", "Bolivia", "Peru", "Ecuador", "Brasil", "Colombia", "Venezuela", "Uruguay" private String[] habitantes= { "40000000", "17000000", "6500000", "10000000", "30000000", "14000000", "183000000", "44000000", "29000000", "3500000" }; private TextView tvl; private ListView lvl; @Override protected void onCreate(Bundle savedinstanceState) super.onCreate(savedinstanceState); setContentView(R.layout.activity_main); tvl=(TextView)findViewByid(R.id.tvl); lvl= (ListView)findViewByid(R.id.listView); ArrayAdapter<String> adapter= new ArrayAdapter<String>(this, android.lR.layout .simple_list_item_1, paises); lvl.setAdapter(adapter); ! lvl.setOnitemClickListener(new AdapterView.OnitemClickListener() 1 @Override i public void onitemClick(AdapterView parent, View view, int posit�on, long id) { tvl.setText("Población de "+ lvl.getitemAtPosition(position) !+ " es "+ habitantes[position]); ) ) ; @Override public boolean onCreateOptionsMenu(Menu menu) // Inflate the menu; this adds items to the action bar if it is getMenuinflater().inflate(R.menu.menu_main, menu); presJ,nt. return true; @Override public boolean onOptionsitemSelected(Menuitem item) // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getltemld(); //noinspection SimplifiableifStatement if (id== R.id.action settings) { return true; return super.onOptionsitemSelected(item); .....................____ ...................................................___ ............................! Primero definimos dos vectores paralelos donde almacenamos en uno los nombres de países y en el otro almacenamos la cantidad de habitantes de dichos países: private String[] paises={"Argentina","Chile","Paraguay","Bolivia","Peru", "Ecuador","Brasil","Colombia","Venezuela","Uruguay"}; private String[] habitantes={"40000000","17000000","6500000","10000000","30000000", "14000000","183000000","44000000","29000000","3500000"}; Definimos un objeto de tipo TextView y otro de tipo ListView donde almacenaremos las referencias a los objetos que definimos en el archivo XML: private TextView tvl; private ListView lvl; En el método onCreate obtenemos la referencia a los dos objetos: tvl=(TextView)findViewByid(R.id.tvl); lvl =(ListView)findViewByid(R.id.listView); - 47 -
  • 87. ! ) public boolean onCreateOptionsMenu(Menu menu) ¡ // Inflate the menu; this adds items to the action bar if it is pres�nt. getMenuinflater().inflate(R.menu.menu_main, menu); return true; @Override public boolean onOptionsitemSelected(Menuitem item) !/ Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getitemid(); //noinspection SimplifiableifStatement if (id == R.id.action_settings) { return true; return super.onOptionsitemSelected(item); public void grabar(View v) String nombre=etl.getText().toString(); String datos=et2.getText().toString(); SharedPreferences preferencias=getSharedPreferences("agenda", SharedPreferences.Editor editor=preferencias.edit(); editor.putString(nombre, datos); ContexJ.MODE Pf editor.commit(); Toast.makeText(this,"Datos grabados",Toast.LENGTH_LONG).show(); public void recuperar{View v) String nombre=etl.getText().toString(); SharedPreferences prefe=getSharedPreferences("agenda", String d=prefe.getString(nombre, ""); Context.MODE JRIVATE); if (d.length()==O) { Toast.makeText(this,"No existe dicho nombre en la ! agenda",Toast.LENGTH_LC else { et2.setText(d); Definimos dos objetos de la clase EditText donde se ingresan el nombre de la persona y los datos de dicha persona: prívate EditText etl,et2; Cuando se presiona el botón grabar: public void grabar(View v) { } String nombre=etl.getText().toString(); String datos=et2.getText().toString(); SharedPreferences preferencias=getSharedPreferences("agenda", Context.MODE_PRIVATE); SharedPreferences.Editor editor=preferencias.edit(); editor.putString(nombre, datos); editor.commit(); Toast.makeText(this,"Datos grabados",Toast.LENGTH_LONG).show(); Extraemos los dos datos de los EditText, creamos un objeto de la clas SharedPReferences con el nombre de "agenda". Creamos un objeto de la clase Editor y procedemos a grabar en el archivo de preferencias mediante putString: editor.putString(nombre, datos); Significa que en el archivo de preferencias se almacena una entrada con el nombre de la persona y los datos de dicha persona. Por otro lado tenemos la lógica para recuperar los datos de una persona de la agenda: public void recuperar(View v) { String nombre=etl.getText().toString(); - 87 -
  • 106. import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.Toast; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class MainActivity extends ActionBarActivity { private EditText et1,et2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et1=(EditText)findViewById(R.id.editText); et2=(EditText)findViewById(R.id.editText2); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public void grabar(View v) { String nomarchivo = et1.getText().toString(); String contenido = et2.getText().toString(); try { - 106 -
  • 107. File tarjeta = Environment.getExternalStorageDirectory(); Toast.makeText(this,tarjeta.getAbsolutePath(),Toast.LENGTH_LONG).show(); File file = new File(tarjeta.getAbsolutePath(), nomarchivo); OutputStreamWriter osw = new OutputStreamWriter( new FileOutputStream(file)); osw.write(contenido); osw.flush(); osw.close(); Toast.makeText(this, "Los datos fueron grabados correctamente", Toast.LENGTH_SHORT).show(); et1.setText(""); et2.setText(""); } catch (IOException ioe) { Toast.makeText(this, "No se pudo grabar", Toast.LENGTH_SHORT).show(); } } public void recuperar(View v) { String nomarchivo = et1.getText().toString(); File tarjeta = Environment.getExternalStorageDirectory(); File file = new File(tarjeta.getAbsolutePath(), nomarchivo); try { FileInputStream fIn = new FileInputStream(file); InputStreamReader archivo = new InputStreamReader(fIn); BufferedReader br = new BufferedReader(archivo); String linea = br.readLine(); String todo = ""; while (linea != null) { todo = todo + linea + " "; linea = br.readLine(); } br.close(); archivo.close(); et2.setText(todo); } catch (IOException e) { Toast.makeText(this, "No se pudo leer", Toast.LENGTH_SHORT).show(); } } } El método para grabar los datos en un archivo de texto localizado en una tarjeta SD comienza obteniendo el directorio raiz de la tarjeta a través del método getExternalStorageDirectory(), el mismo retorna un objeto de la clase File. public void grabar(View v) { String nomarchivo = et1.getText().toString(); String contenido=et2.getText().toString(); try { File tarjeta = Environment.getExternalStorageDirectory(); - 107 -
  • 108. Creamos un nuevo objeto de la clase File indicando el camino de la unidad SD y el nombre del archivo a crear: File file = new File(tarjeta.getAbsolutePath(), nomarchivo); Por último similar al acceso de un archivo interno creamos un objeto de la clase OutputStreamWriter: OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream(file)); Grabamos el contenido del EditText: osw.write(contenido); Cerramos el archivo: osw.flush(); osw.close(); Toast.makeText(this,"Los datos fueron grabados correctamente",Toast.LENGTH_SHORT).show(); et1.setText(""); et2.setText(""); } catch (IOException ioe) { Toast.makeText(this, "No se pudo grabar", Toast.LENGTH_SHORT).show(); } } Para la lectura del archivo nuevamente obtenemos la referencia de la tarjeta SD para obtener el path de la unidad de almacenamiento, el resto del algoritmo es similar al visto con un archivo interno: public void recuperar(View v) { String nomarchivo = et1.getText().toString(); File tarjeta = Environment.getExternalStorageDirectory(); File file = new File(tarjeta.getAbsolutePath(), nomarchivo); try { FileInputStream fIn = new FileInputStream(file); InputStreamReader archivo=new InputStreamReader(fIn); BufferedReader br=new BufferedReader(archivo); String linea=br.readLine(); String todo=""; while (linea!=null) { todo=todo+linea+"n"; linea=br.readLine(); } br.close(); archivo.close(); et2.setText(todo); } catch (IOException e) { Toast.makeText(this, "No se pudo leer", Toast.LENGTH_SHORT).show(); } } Este proyecto lo puede descargar en un zip desde este enlace: proyecto018.zip - 108 -
  • 109. Importante. Si lo probamos con el emulador del Nexus 5 en el Android Studio cuando tratemos de grabar nos mostrará la notificación "No se pudo grabar", esto debido a que dicho celular no permite extender la memoria mediante tarjetas sd. La solución para probar es crear otro dispositivo virtual. Los pasos para crear otro dispositivo virtual en Android Studio son los siguientes: 1 - Desde el menú de opciones del Android Studio accedemos a Tools->Android->AVD Manager. 2 - Aparece un diálogo con todas las máquinas virtuales creadas hasta el momento (en las primeras versiones de Android Studio crea una máquina virtual para el Nexus 5) Presionamos el botón "Create Virtual Device". - 109 -