Este documento presenta un manual de Android que incluye ejemplos de código para aplicaciones como "Hola Mundo", cálculo de IMC, factorial, un álbum de fotos y más. Explica la estructura de cada aplicación a través de XML y Java, con detalles sobre diseño de interfaz, funciones y lógica de programación.
1. Plantel: CECYTEM TECAMAC
Tema: Manual de android “ADT”
Nombre del alumno: Isabel García Hernández
Nombre del profesor: René Domínguez escalona
Grupo: 402
Carrera: Programación
Turno: matutino
Índice:
Hola Mundo
IMC
Factorial
Álbum
Rebosodroid
Listview
Sonido aniales
2. Video view
Notificaciones
Togglebutton
Checkbox
Radiobutton
Progressbar
Spinner
Webview
Timepicker
Tabhost
Acelerómetro
Canvas
NTRODUCCION
En este manual podremos observar la estructura de algunas aplicaciones.
Tambie se observara para que sirve cada condición que se utilizan en las
aplicaciones que se utilizan dia con dia en cada celular de este planeta
3. “Hola mundo”
Al abrir eclipse y crear una clase nueva automáticamente te abrirá dos pestañas una con el
nobre que le ayas asignado mas la extensión “.XML” el cual es como el cuerpo de la
aplicación en esta parte del programa podemos asignarle el tipo de color de fondo, en si
es todo el diseño de la aplicación.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
5. Esta solo es una aplicación que te mostrara un texto en especifico con el color de
fondo deseado y no tiene ninguna otra tarea mas que esa.
“IMC”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical" >
*Aqui se colocara un editex para que el usuario pueda ingreasar
cualquier numero el cual nos indicara que esa es su estatura.
<EditText
android:id="@+id/num"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:background="#000000"
android:textColor="#FFFFFF"
6. android:hint="altura"
android:numeric="decimal"/>
*En el Segundo nos indicara su estatura del usuario el cual al
igual que el otro podra ingresar el numero que el usuario
requiera.
<EditText
android:id="@+id/numd"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_margin="10dp"
android:background="#000000"
android:textColor="#FFFFFF"
android:hint="peso"
android:numeric="decimal"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
*Aqui el boton nos servira para que al momento de presionarlo nos calule el índice
de masa corporal con los datos ya introducidos anteriormente
<Button
android:id="@+id/cal"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="#3366FF"
android:text="calcular"
android:textColor="#000000"/>
*El Segundo nos servirá para que al momento de presionarlo nos borre los datos
ya introducidos anteriormente y asi los podamos volver a introducir
<Button
android:id="@+id/bor"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="1"
android:layout_margin="10dp"
android:background="#3366FF"
android:text="Borrar"
android:textColor="#000000"/>
</LinearLayout>
*El text view nos servirá para que nos muestre el resultado después de ya haber
introducido los datos que se nos pide
<TextView
android:id="@+id/res"
7. android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="#000000"
android:textColor="#FFFFFF">
</TextView>
</LinearLayout>
Acontinuacion te mostrare el codigo .java para que las condiciones se puedan
cumplir correctamentamente.
package com.abuelo.imc;
import com.abuelo.imc.R;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class IMC extends Activity implements OnClickListener {
*Aqui solo estamos declarando las variables para que estas puedan ser
utilizadas correvtamente.
EditText txtaltura,txtpeso;
TextView txtResultado;
Button btnCalcular,btnBorrar;
@Override
8. protected void onCreate(Bundle savedInstanceState) {
*Aqui se esta especificando las variables a que le pertenecen de los objetos
empleados ya anteriormente en el codigo .xml.
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_imc);
txtpeso=(EditText)findViewById(R.id.num);
txtaltura=(EditText)findViewById(R.id.numd);
txtResultado=(TextView)findViewById(R.id.res);
btnCalcular=(Button)findViewById(R.id.cal);
btnBorrar=(Button)findViewById(R.id.bor);
btnCalcular.setOnClickListener(this);
btnBorrar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
*Como podras notar aqui se empleara un switch el cual nos ayudara para
identificar si el usuario ya ingreso los datos de lo contario saldra un mensage que
nos especifique que no hay ningun dato.
switch(v.getId()){
case R.id.cal:
9. String u=txtpeso.getText().toString();
String d=txtaltura.getText().toString();
*Tambien emplearemos un if para que este nos ayude a calcular el IMC (índice de
masa corporal) y ai nos muestre el resultado final de esta
if((u.equals("")|| d.equals("")) || (u.equals("")&& d.equals("")) ){
Toast.makeText(this,"Falta Valores", Toast.LENGTH_SHORT).show();
}else{
double uno=Double.parseDouble(txtpeso.getText().toString());
double dos=Double.parseDouble(txtaltura.getText().toString());
double die=uno*uno;
double IMC=dos/die;
txtResultado.setText("TU IMC ES : "+IMC+"n");
Toast.makeText(this,"Valores calculados", Toast.LENGTH_SHORT).show();
}
break;
case R.id.bor:
txtpeso.setText("");
txtaltura.setText("");
txtResultado.setText("");
}
}
}
10. Y asi será como se visualizara al momento de que se instale en el celular.
Ya es tu decisión el diseño que requiera utilizar y en esta aplicación solo se
calcula tu IMC que se calcula multiplicando tu peso por la altura .
“Factorial”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical" >
<EditText
android:id="@+id/num"
13. switch(v.getId()){
case R.id.cal:
if(a.equals("")){
t = Toast.makeText(this, "Inserta un valor chavo" ,
Toast.LENGTH_SHORT);
t.show();
}
else{
int b=Integer.parseInt(a);
if(b==1){
r.setText("La factorial es = 1");
}
if(b==2){
r.setText("La factorial es = 2");
}
if(b>2){
int c=2;
int d=3;
int o=0;
for(e=0; e<b; e++){
o=c*d;
if(d==b){
r.setText("La factorial es = "+o);
}
else{
15. Este se declara igual que el anterior pues es casi lo mimo solo que la diferenci es que a
este se le debe declarar un objeto string para que guarde el numero y luego con el
switch lo multiplique dependiendo de el numero que se vaya ingresando como por
ejemplo si se coloca el numero 2 seria=1*2=2 .
16. “Album”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000000">
Aqui se declararan todas las imagenes que se vayan a utilizar en
nuestra aplicacion
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="200sp"
android:src="@drawable/a"/>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="100sp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/image1"
android:layout_width="100sp"
android:layout_height="100sp"
android:src="@drawable/a"/>
<ImageView
android:id="@+id/image3"
android:layout_width="100sp"
android:layout_height="100sp"
android:src="@drawable/c" />
<ImageView
android:id="@+id/image2"
android:layout_width="100sp"
android:layout_height="100sp"
android:src="@drawable/b"/>
<ImageView
android:id="@+id/image4"
android:layout_width="100sp"
android:layout_height="100sp"
android:src="@drawable/d"/>
<ImageView
android:id="@+id/image5"
android:layout_width="100sp"
android:layout_height="100sp"
android:src="@drawable/e"/>
18. A continuacion te mostrare el codigo java
package pelon.wallpaperp;
import android.os.Bundle;
import android.app.Activity;
import android.app.WallpaperManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class Wallpaperp extends Activity implements OnClickListener {
*Aqui les estamos asignando una variable a las imagenes que utilizaremos.
ImageView image, image1, image2, image3, image4, image5, image6,
image7,
image8, image9, image10;
Button btn;
int fondo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
*Aqui le estamos declarando que imagen es cual a la variable.
setContentView(R.layout.activity_wallpaperp);
image=(ImageView)findViewById(R.id.image);
20. @Override
public void onClick(View v) {
*En este caso utilizaremos un switch para que nos de las varias opciones de
imagenes que tenemos en nuestro álbum y también para que nos de la opción de
cambiar el fondo
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.image1:
image.setImageResource(R.drawable.a);
fondo=R.drawable.a;
break;
case R.id.image2:
image.setImageResource(R.drawable.b);
fondo=R.drawable.b;
break;
case R.id.image3:
image.setImageResource(R.drawable.c);
fondo=R.drawable.c;
break;
case R.id.image4:
image.setImageResource(R.drawable.d);
fondo=R.drawable.d;
break;
case R.id.image5:
image.setImageResource(R.drawable.e);
fondo=R.drawable.e;
23. “ListView”
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/a"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
Aqui se puede visualizar una caja de texto donde el usuario podra ingresar
cualquier tipo de texto
<EditText
android:id="@+id/elemento"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="0.3"
android:background="#FFFFFF"
android:contentDescription="agregarDescElemento"
android:hint="AgregarElemento"
android:marqueeRepeatLimit="marquee_forever"
android:textColor="#000000"
android:textSize="26sp"
android:textStyle="bold" />
Aqui el boton nos servira para que el usuario pueda ingresar el
texto que ya a escrito
<Button
android:id="@+id/agregar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#00FFFF"
android:hint="agregar" />
</LinearLayout>
Y aquí nuestro text view nos mostrara todos los textos que se lleguen a
escribir
<ListView
android:id="@+id/lista"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
A continuación te mostraremos el código java
package com.example.list;
24. import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends Activity implements OnClickListener {
EditText elemento;
ArrayList<String> elementos;
Button btn;
ListView lista;
ArrayAdapter<String> adaptador;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Estamos declarando las variables que se utilizaran y la fuuncion que tendran
setContentView(R.layout.activity_main);
lista=(ListView)findViewById(R.id.lista);
elemento=(EditText)findViewById(R.id.elemento);
btn=(Button)findViewById(R.id.agregar);
elementos= new ArrayList<String>();
adaptador =new ArrayAdapter(this,
android.R.layout.simple_list_item_1,elementos);
lista.setAdapter(adaptador);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
En este caso ahora utilizaremos un if para que este valla guardando los textos que
se vallan escribiendo hy asi se visualizen nuestra pantalla.
if(v.getId()==R.id.agregar){
elementos.add(elemento.getText().toString());
elemento.setText("");
adaptador.notifyDataSetChanged();
}
}
25. Y asi es como se ve la aplicación al final instalada en un celular correctamente
26. “RebosoDroid”
En esta aplicación utilizaremos dos conexiones para realizarla.
Esta es la primera estructura de .xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
En esta parte solo hemos colocado dos editext para que el usuario pueda ingresar
los datos que se solicitan
<EditText
android:id="@+id/nombre"
android:layout_width="match_parent"
android:layout_height="60sp"
android:layout_margin="10sp"
android:background="#cc00ff"
android:hint="nombre"
android:maxLength="20"
android:textSize="50sp"/>
<EditText
android:id="@+id/edad"
android:layout_width="match_parent"
android:layout_height="60sp"
android:layout_margin="10sp"
android:background="#cc00ff"
android:hint="edad"
android:maxLength="20"
android:textSize="50sp"/>
Tambien hemos colocado dos botones que nos servirán para enviar
los datos ya escritos a otra pagina y otro para borrar los datos
<Button
android:id="@+id/enviar"
android:layout_width="match_parent"
android:layout_height="60sp"
android:layout_margin="10sp"
android:background="#cc00ff"
android:hint="Enviar"
android:maxLength="20"
android:textSize="50sp"/>
<Button
android:id="@+id/borrar"
android:layout_width="match_parent"
android:layout_height="60sp"
android:layout_margin="10sp"
android:background="#cc00ff"
android:hint="Borrar"
27. android:maxLength="20"
android:textSize="50sp"/>
</LinearLayout>
Y su .java es el siguiente
package com.Sparda.rebosodroid;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
EditText nombre,edad;
Button enviar,borrar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aqui se estan declarando todas las variables de los obgetos que se utilizaron en el
.xml
setContentView(R.layout.activity_main);
nombre=(EditText)findViewById(R.id.nombre);
edad=(EditText)findViewById(R.id.edad);
enviar=(Button)findViewById(R.id.enviar);
borrar=(Button)findViewById(R.id.borrar);
enviar.setOnClickListener(this);
borrar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Y en este utilizaremos if para que esta condicion nos sirva para guardar o borrar
los datos que se introduscan y nos mande a la siguiente pagina
if(v.getId()==R.id.enviar){
String n=nombre.getText().toString();
28. String e=edad.getText().toString();
if ((!n.equals("" ) || !e.equals("")) || (!n.equals("" ) && !e.equals(""))){
Intent enviardatos=new Intent(this, Recibe.class);
enviardatos.putExtra("nombre", n);
enviardatos.putExtra("edad", e);
startActivity(enviardatos);
}else{
Toast.makeText(this, "faltan valores", Toast.LENGTH_SHORT).show();
} if(v.getId()==R.id.borrar){
nombre.setText("");
edad.setText("");
}
}
}
}
El segundo código .xml es el siguiente el cual corresponde a la pagina donde nos
mostrara un mensaje
En este solo se coloca un text view puesto que solo lo que ara será mostrar un
mensaje
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/resultado"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10sp"
android:background="#ffffff"
android:textSize="10sp"/>
</LinearLayout>
Y su estructura .java es la siguiente
package com.Sparda.rebosodroid;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
29. public class Recibe extends Activity{
Aqui solo se esta declarando los objetos que se utilizaron en el .xml
TextView Resultado;
String nombre="";
int edad=0;
protected void onCreate(Bundle savedInstanceState){
Y se esta difiniendo lo que contendra cada objeto ya definido anteriormente y le
esta dando permiso a la pagina principal de recibir los datos que ingresen
super.onCreate(savedInstanceState);
setContentView(R.layout.recibe);
Resultado=(TextView)findViewById(R.id.resultado);
Bundle recibedatos=getIntent().getExtras();
nombre=recibedatos.getString("nombre");
edad=Integer.parseInt(recibedatos.getString("edad"));
Resultado.setText("Hola!!!!"+nombre+"n"+"Tu edad es:"+edad);
}
}
Yasi es como se visualizan las dos pantallas al final que se instalan correctamente
en el celeular
30. “Sonido de animales”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/android"
tools:context=".Animales" >
En esta estructura solo se colocaran button en los cuales se le colocaran una
imagen determinada para que se identifique de que se trata en lugar de poner solo
textos
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="0.85"
android:orientation="horizontal" >
<Button
android:id="@+id/a1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/caballo"
/>
<Button
android:id="@+id/a2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/cuervo"
/>
<Button
android:id="@+id/a3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:background="@drawable/elefante"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="0.85"
android:orientation="horizontal" >
32. android:background="@drawable/vaca"
/>
</LinearLayout>
</LinearLayout
A continuación te mostraremos la estructura .java
package com.abuelo.animales;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class Animales extends Activity implements OnClickListener{
SoundPool sp;
Aqui se estan definiendo los valores que ya se le avian asignado en el .xml alos
botones
Button a1,a2,a3,a4,a5,a6,a7,a8,a9;
int b1,b2,b3,b4,b5,b6,b7,b8,b9;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animales);
33. Yaqui se puede ver que se le estan definiendo los sonidos a cada boton en
especifico
a1=(Button)findViewById(R.id.a1);
a2=(Button)findViewById(R.id.a2);
a3=(Button)findViewById(R.id.a3);
a4=(Button)findViewById(R.id.a4);
a5=(Button)findViewById(R.id.a5);
a6=(Button)findViewById(R.id.a6);
a7=(Button)findViewById(R.id.a7);
a8=(Button)findViewById(R.id.a8);
a9=(Button)findViewById(R.id.a9);
a1.setOnClickListener(this);
a2.setOnClickListener(this);
a3.setOnClickListener(this);
a4.setOnClickListener(this);
a5.setOnClickListener(this);
a6.setOnClickListener(this);
a7.setOnClickListener(this);
a8.setOnClickListener(this);
a9.setOnClickListener(this);
sp= new SoundPool(8, AudioManager.STREAM_MUSIC,0);
b1=sp.load(this,R.raw.caba, 1);
b2=sp.load(this,R.raw.cue, 1);
b3=sp.load(this,R.raw.ele, 1);
b4=sp.load(this,R.raw.lechu, 1);
34. b5=sp.load(this,R.raw.lion, 1);
b6=sp.load(this,R.raw.lob, 1);
b7=sp.load(this,R.raw.mosca, 1);
b8=sp.load(this,R.raw.pero, 1);
b9=sp.load(this,R.raw.vaco, 1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.animales, menu);
return true;
}
@Override
En este caso se utilizara un switch para que nos de varias opciones de elegir
cualquier boton que se encuentra en la pantalla y asi se pueda escuchar el sonido
que se le ha predeterminado
public void onClick(View v) {
switch(v.getId()){
case R.id.a1:
sp.play(b1, 1,1, 1, 0,1);
break;
case R.id.a2:
sp.play(b2, 1,1, 1, 0,1);
break;
case R.id.a3:
sp.play(b3, 1,1, 1, 0,1);
35. break;
case R.id.a4:
sp.play(b4, 1,1, 1, 0,1);
break;
case R.id.a5:
sp.play(b5, 1,1, 1, 0,1);
break;
case R.id.a6:
sp.play(b6, 1,1, 1, 0,1);
break;
case R.id.a7:
sp.play(b7, 1,1, 1, 0,1);
break;
case R.id.a8:
sp.play(b8, 1,1, 1, 0,1);
break;
case R.id.a9:
sp.play(b9, 1,1, 1, 0,1);
break;
}
}
}
36. Y asi es como ya se puede visualizar nuestra aplicación ya
intalada en un celular
37. “Web view”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
Se declarara un botan para que este pueda tomar la foto que se desee y se logre
visualizar
<Button
android:id="@+id/botonCapturar"
android:layout_width="91dp"
android:layout_height="54dp"
android:background="#0066gg"
android:text="Capturar"
android:textColor="#FFFFFF" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
Tambien se declarara un image view par que en este se logre visualizar la
fotografia ya capturada
<ImageView
android:id="@+id/imageViewFoto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/botonCapturar"
android:layout_margin="35sp" >
</ImageView>
</LinearLayout>
</LinearLayout>
A continuación te mostraremos el código .java
package app.ejempl.video;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
38. import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
ImageView imagen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Aqui se puede observer que se estan declarando las variables con las funciones
que impartiran
imagen = (ImageView) findViewById(R.id.imageViewFoto);
Button boton = (Button) findViewById(R.id.botonCapturar);
boton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
});
39. }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Y aqui se puede observer que se ele esta dando permiso para que se logre tomar
la fotografia y se visualice en el image view
super.onActivityResult(requestCode, resultCode, data);
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
imagen.setImageBitmap(bitmap);
}
}
Y asi es como se observara la fotografía deseada no se distingue mucho el marco
por que el color de mi fondo es blanco al igual que el color de este.
40. “Notificacion”
En esta aplicación igual se utilizaran dos pantallas asi que aquí te mostramos la
primera en .xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Noti" >
En esta solo se esta declarando un boton el cual nos servira para declararlo como
si ya se ubiera descargado algo
<Button
android:id="@+id/boton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Iniciar"
android:background="#FF00C5"/>
</RelativeLayout>
Y este es su .java
package com.aronmith.notificacion;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
41. public class Pantallauno extends Activity {
Aqui se estan declarando las variables que se utilizaran
NotificationManager nm;
private static final int ID_NOTIFICACION_PERSONAL= 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Aqui se le estara dando permisos necesarios para que este se pueda realizar
setContentView(R.layout.activity_pantallauno);
Button boton = (Button)findViewById(R.id.boton);
nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Notification notification = new
Notification(R.drawable.ic_launcher,"QUE ONDA XD", System.currentTimeMillis());
PendingIntent intencionpendiente=
PendingIntent.getActivity(getApplicationContext(),0,new
Intent(getApplicationContext(),Pantallados.class),0);
notification.setLatestEventInfo(getApplicationContext(),
"Notificacion", "Notificacion personal de Android", intencionpendiente);
42. nm.notify(ID_NOTIFICACION_PERSONAL, notification);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pantallauno, menu);
return true;
}
public void onDestroy(){
super.onDestroy();
nm.cancel(ID_NOTIFICACION_PERSONAL);
}
}
Esta es la segunda panatalla en la cual se observara el mensaje ya identificado es
el código .xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".pantallados" >
Aqui solo se utilizara un text view el cual nos servira para que salga el mensage ya
especificado anteriormente
43. <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hola que hace?" />
</RelativeLayout>
Y este es su java
package com.aronmith.notificacion;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class Pantallados extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
En este se esta declarando a que pantalla le dictara cuando tenga que salir el
mensage
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pantallados);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Y aqui se ele esta dando permiso para que la principal le dege mencionar cuando
se tendra que mostrar el mensage
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.pantallados, menu);
return true;
}
}
44. ncncnf ccm
Asi es como se visualizaran las dos paginas una ves instaladas
correctamente
45. “Togglebutton”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Togglebutton"
>
En este se va a visualizar el fondo de un color o una imagen en
especifico
<LinearLayout
android:id="@+id/fondo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
Aqui el toggle button para que aga un efecto rapido de cambio de imagenes
<ToggleButton
android:id="@+id/toggleButton1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10sp"
android:textOn="encendido"
android:textOff="apagado"
/>
Esta es nuestra imagen la cual tendra que cambiar repentinamente
al ejecutarlo en cierta forma es nuestro efecto
<!-- <ImageView
android:id="@+id/img1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10sp"
android:src="@drawable/coche"
android:background="@drawable/coche"
/> -->
</LinearLayout>
</LinearLayout>
Este es su java
package com.abuelo.togglebutton;
import android.os.Bundle;
import android.media.*;
import android.app.Activity;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.LinearLayout;
import android.widget.ToggleButton;
46. public class Togglebutton extends Activity implements OnCheckedChangeListener {
SoundPool sp;
int audio;
ToggleButton alarma;
LinearLayout con;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_togglebutton);
Aqui se estan declarando los obgetos que ya se an declarado en el
.xml con su variable y lo que tendrán que realizar
con = (LinearLayout) findViewById(R.id.fondo);
alarma= (ToggleButton) findViewById(R.id.toggleButton1);
alarma.setOnCheckedChangeListener(this);
sp= new SoundPool(8, AudioManager.STREAM_MUSIC,0);
audio=sp.load(this,R.raw.coche, 1);
}
@Override
public void onCheckedChanged(CompoundButton CompoundButton, boolean b) {
Y en esta parte se esta declarando el if para que se realice si
elige prender o encender la aplicacion o apagarla para eso nos dan
el else
if (b) {
con.setBackgroundResource(R.drawable.cochedos);
sp.play(audio, 1, 1, 1, 0, 1);
}
else{
con.setBackgroundResource(R.drawable.coche);
}
}
}
47. Y esgta es la manera en la que se visualiza una ves ya instalada y
ejecutada
49. import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.Toast;
public class MainActivity extends Activity {
*Aquí se estan declarando las variables que ya se le abian asignado a los check box
anteriormente en el codigo .xml
CheckBox ch_Android,ch_Iphone,ch_Windows;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
*Aquí se esta declarando lo que le pertenece a cada check box con su variable asignada ya
anteriormente.
setContentView(R.layout.activity_main);
ch_Android=(CheckBox) findViewById(R.id.ch1);
ch_Iphone=(CheckBox) findViewById(R.id.ch2);
ch_Windows=(CheckBox) findViewById(R.id.ch3);
OnClickListener l=new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
*Aquí se esta declarando un if para que la aplicación pueda visualizar que opcion esta
eligiendo en si para que al momento que se elija y se quiera cambiar la opcion no se
quede esta y asi se pueda reelegir y para que esto ocurra tambien se colocara else if, else
50. que se ria como un case pero en este se colocara como para reelegir y no se quede la
primera opcion y al mismo salga un mensage oculto que te diga la opcion que as elegido.
if(ch_Android.isChecked())
{
Toast.makeText(MainActivity.this, "Android",
Toast.LENGTH_SHORT).show();
}
else if (ch_Iphone.isChecked()){
Toast.makeText(MainActivity.this,"Iphone",
Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(MainActivity.this, "WindoWs",
Toast.LENGTH_SHORT).show();
}
}
};
ch_Android.setOnClickListener(l);
ch_Iphone.setOnClickListener(l);
ch_Windows.setOnClickListener(l);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
51. }
}
Asi es como se visualizara en un celular al ya instalar la aplicación propiamente.
52. “Radio Button”
Como anterior mente se explico este codigo es para dec larar como se iran
posicionando los objetos que se vallan colocando que en este caso seran
textview, buttons y radio button.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_horizontal_margin"
tools:context=".MainActivity" >
El codigo siquiente es de un text view el cual le estamos colocando una pregunta
que es “de que pais eres” con esto estamos declarando que en nuestar pantalla se
cisualizara esta preunta para que usuario la pueda visualizar
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="de que pais eres"
android:textAppearance="?android:attr/textAppearanceLarge" />
A partir de aquí podras visualizar tres radio button los cuales tendran asta el
final en un “android:text=” esto quiere decir que se les colocara una posible
respuesta que el usuario podra darnos y tambien los estamos posicionando y
asignandoloes una variable al principio co el “android:id=@+id/nombre que se
desee”.
En si los radio button sirven para darnos multiple opciones.
<RadioGroup
android:id="@+id/rg"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:checked="true"
android:text="mexico" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:checked="true"
android:text="peru" />
<RadioButton
android:id="@+id/radio2"
53. android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:checked="true"
android:text="colombia" />
</RadioGroup>
Aquí se puede observar un button el cual se esta asignando para que al momento
de darle click este nos diga la respuesta que a elegido el usuario.
Tambien le estamos asiganando una variable y un nombre que el usuario podra
visualizar
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
Todo lo escrito anteriormente es esta escrito en la pestaña de .xml que como ya
se avia explicado es solo la estructura de nuestra aplicación.
Acontinuacion se explicara la pestaña de .java que es en donde iran todas
nuestras condiciones para que esta pueda funcionar.
Aquí se estan declarando las clases que se van a necesitar es como darles
permiso a todo lo empleado anterior mente en el codigo .xml.
package com.example.radio;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
Aquí se estan declarando las variables que se le asignaron anteriormente a los
objetos empleados.
public class MainActivity extends Activity implements OnClickListener {
View boton;
RadioGroup rg;
int checa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rg=(RadioGroup)findViewById(R.id.rg);
boton=(View)findViewById(R.id.button1);
boton.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
54. return true;
}
@Override
public void onClick(View arg0) {
checa=rg.getCheckedRadioButtonId();
Aquí se esta declarando un switch el cual nos servira para que se declaren los
radio button y asi nos permita escoger alguno de los que ya se declararon
anteriormente.Checa solo nos esta dejando escoger alguna opcion yrevisar si con
el boton cual es la opcion que emos elegido y darnos un mensage oculto.
switch(checa){
case R.id.radio0:Toast.makeText(this, "saludosos a los mexicanos",
Toast.LENGTH_SHORT).show();
break;
case R.id.radio1:Toast.makeText(this, "saludos peru",
Toast.LENGTH_SHORT).show();
break;
case R.id.radio2:Toast.makeText(this, "saludos colombianos",
Toast.LENGTH_SHORT).show();
break;
}
}
}
Asi es como se podra visualizar en un celular una ves instalado.
55. “ProgresBar”
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:orientation="vertical" >
se declara el progress bar el cual es una barra se estado que en este caso nos
indica que tanto se esta cargando la aplicacion
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="false"
android:max="100"
android:padding="4dip" >
</ProgressBar>
Este se esta declarando para que se visualice la imagne o lo que este cargando
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#B61E14" >
</TextView>
<Button
android:id="@+id/button1"
android:layout_width="120dp"
android:layout_height="120dp"
android:background="@drawable/a"
android:onClick="startProgress" >
</Button>
Y esta se declara para que se visualice el resultado de la aplicacion en este caso
sera una imagen
<ImageView
android:id="@+id/image1"
android:layout_width="250sp"
android:layout_height="250sp" />
</LinearLayout>
Este es su java
package com.doggy.progess;
import android.app.Activity;
56. import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class Progess extends Activity implements OnClickListener{
private ProgressBar progress;
private TextView text;
ImageView image1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progess);
progress = (ProgressBar) findViewById(R.id.progressBar1);
text = (TextView) findViewById(R.id.textView1);
image1=(ImageView) findViewById (R.id.image1);
}
public void startProgress(View view) {
Runnable runnable = new Runnable() {
57. @Override
public void run() {
for (int i = 0; i <= 100; i++) {
final int value = i;
doFakeWork();
progress.post(new Runnable() {
@Override
public void run() {
text.setText(value + "/100");
progress.setProgress(value);
Aqui se esta declarando el if para saber cuanto tiempo tardara en cargar la
aplicacion
if(value==100){
image1.setImageResource(R.drawable.a);
}
}
}
);
}
}
};
new Thread(runnable).start();
}
61. “Acelerometro”
*Aquí como ya se a explicado anteriormente se puede visualizar el inicio de este codigo en
donde se esta declaraondo como se iran posicionando los objetos que se vayan
empleando.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
*Aquí solo se visualizara un text view en el cual se podra cisualizar los
numeros que se vayan dando dependiendo de las inclinaciones que el celular vaya
teniendo
<TextView
android:id="@+id/acceleration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="X: Y: Z:"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
*Aquí se stan visualizando los permisos de las objetos que se iran empleando
desde el .xml.
package com.example.acelerometro;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.app.Notification.Action;
import android.view.Menu;
62. import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener {
*Aquí se estan declarando las variables que anteriormente en el .xml ya se abian
emplementado y tambien otras que se utilizaran a lo largo del proceso.
Sensor accelerometer;
SensorManager sm;
TextView acceleration;
@Override
public void onCreate(Bundle savedInstanceState){
*Aquí se estan declarando nuevamente las variables para que se les permita utilizar
ciertos utencilios del celular que esn este caso es el sensor de movimiento para que pueda
identificar las inclinaciones que se vayan aciendo.
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
accelerometer=sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener((SensorListener) this,accelerometer.TYPE_ACCELEROMETER);
acceleration=(TextView)findViewById(R.id.acceleration);
}
@Override
public void onAccuracyChanged(Sensor sensor,int accuracy){
}
//TODO Auto-generated method stub
@Override
public void onSensorChanged(SensorEvent event){
63. *Aquí se estan colocando las variables para que estas puedan visualizar el resultado de las
inclinaciones en la pantalla del celular que se visualizaran en el text view que ya antes se
habia colocado en el .xml
//TODO Auto-generated method stub
acceleration.setText("X:
"+event.values[0]+"nY:"+event.values[1]+"nZ:"+event.values[2]);
}
}
Asi es cmo se visualizara en un celular ya instalada correctamente y claramente con los
numeros respectivos que se iran colocando dependiendo de la posicion del celular.
64. “TabHost”
*Aquí estamos declarando nuevamente la posicion que tendra cada objeto que se vaya
posicionando en la pantalla principal
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
Aquí se visualizara la primera pestaña de la pantalla por que tabhost es una
aplicación para hacer pestañas ya predeterminadas desde el .xml
<TabHost
android:id="@+id/th"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</TabWidget>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
*Aquí se visualiza el editext que nos servira para que el usuario pueda escribir
lo que necesite
<EditText
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
65. <LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
*Aquí se visualiza un boton de muestra que en si no tendra una tarea especifica
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="boton de muestra"/>
</LinearLayout>
<LinearLayout
android:id="@+id/tab3"
android:layout_width="match_parent"
android:layout_height="match_parent">
*Aquí se visualiza un boton el cual lo posicionaremos en la segunda pestaña que
no tendra una tarea en especifico solo sera de muestra
*Aquí se visualiza un text view el cual le servira al usuario para escribir el
texto que requiera
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="esta es la tercera tab" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
*Aquí se puede visualizar que se estan declarando todos los objetos que se emplearon en
el codigo .xml
package com.example.tabhost;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
public class MainActivity extends Activity {
66. *Aquí se visualiza que se esta declarando el tabhost con su variable que ya anteriormente
se le habia asignado.
TabHost th;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
*Aquí se les esta dando la tarea q ue ara cada tabhost que en este caso es una pestaña
que se visualizara en la pantalla del celular
th=(TabHost)findViewById(R.id.th);
//Tab1
th.setup();
*Aquí le esta ordenando que en la primera pantalla solo se visualize el mensage de
bienvenida
TabSpec ts1=th.newTabSpec("Tab1");
ts1.setIndicator("Bienvenido");
ts1.setContent(R.id.tab1);
th.addTab(ts1);
*Aquí le esta diciendo que se visualize en la tabhost 2 el mensage de contenido y un
boton de muestra que como ya se habia explicado no tiene una tarea especifica
//Tab2
th.setup();
TabSpec ts2=th.newTabSpec("Tab2");
ts2.setIndicator("contenido");
ts2.setContent(R.id.tab2);
th.addTab(ts2);
67. *Y en la ultima tabhost se le esta declarando que solo se visualize el mensage de
despedida
//Tab3
th.setup();
TabSpec ts3=th.newTabSpec("Tab3");
ts3.setIndicator("despedida");
ts3.setContent(R.id.tab3);
th.addTab(ts3);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Asi sera como se visualizara en la pantalla de un celular dependiendo de la pestaña que se
abra y se desee visualizar obiamente ya existente.
68. Conclusiones:
Solo queda decir que estas aplicaciones se utilizan dia con dia en los teléfonos celulares y
son muy importaten en nuestras vidas cootidianas