Capitulo 2
En esta unidad veremos instrucciones mas especificas e iremos
aumentado el grado de dificultad así como mas instrucciones :
En esta unidad comenzaremos con la instrucción Intent
Un objeto Intent tiene información que el
sistema Android usa para determinar qué componente debe iniciar
(como el nombre exacto del componente o la categoría del
componente que debe recibir la intent), además de información que
el componente receptor usa para realizar la acción correctamente
(por ejemplo, la acción que debe efectuar y los datos en los que
debe actuar).
Es para navegar entre distintas pantallas (activity), es
iniciar una activity pasar a otra y regresar a la primera.
Intent representa "la intención de hacer algo" en nuestro caso Intent sera para pasar de una
a otra app.
Para crear una Intent basta con crear un objeto.
Intent i
= new Intent();
Agregamos dos parámetros this, y la activity a la que
pretendemos llamar.
Intent i
= new Intent(this,activity2.class);
this es una función de Java que hace referencia
al objeto contenido en memoria que se ha creado, puedes
revisar el tema completo aquí.
Después usamos el método
startActivity:
startActivity(i);
Intent i
= new Intent(this,activity2.class);
startActivity(i);
proyecto0009
Iniciamos Android Studio y creamos el proyecto0009, tal como lo
hemos hecho, después haremos una cambio muy importante
la diferencia es que no asignaremos los
ID a los items.

Realizamos el ajuste de las distancias con Blueprint

Haremos la asignación de los nombres de los campos, para
ello hacemos un clic en el indicador app y después en values y
seleccionamos strings.xml:

lo que veremos lo siguiente del lado derecho

Es la sección es donde quedan registrados los nombres de los
items (campos del área de diseño)
deberán de quedar así :
<resources>
<string
name="app_name">proyecto0009</string>
<string
name="BotonSiguiente">Siguiente</string>
<string name="tv1">Primer
Activity</string>
</resources>
Los símbolos < y > indican una etiqueta referente al campo
a usar, luego se establece el valor de la etiqueta y se termina
con < />
posteriormente se asignan desde el área de diseño

usamos el que esta para el Text View @string/tv1

y realizamos lo mismo para el botón:

podrías observar que una ventana se muestra al
efectuar esta operación tal como esta:

solo presiona la tecla Esc para cerrarla
Ajustamos el tamaño del texto a 24sp, para ambos
controles.
Ahora haremos otra activity en este proyecto, pasamos al
indicador app, y de ahi
botón derecho lo que nos mostrara una serie de opciones en el, así
que vamos a new -> Activity ->Empty Activity

Nos llevara a una ventana ya conocida pero haremos un cambio, en
activity Name lo cambiamos a SegundoActivity, y es para poder
distinguir entre una aplicación y otra

continuamos con el botón Finish
y veremos esto en la nueva activity (SegundoActivity)

Como se puede apreciar tenemos 4 separadores y el que
actualmente esta en uso es el que acabamos de crear
SegundoActivity.java, y también se ha creado otro diseño en
el cual debemos de agregar los mismos elementos (items) que el
primer Activity, procurando que queden en las misma posición.

También modificamos strings.xml del segundo activity, y veamos
que conservo los strings del anterior activity, no olvides
establecer el tamaño de texto a 24sp para ambos items y agregamos
las siguientes lineas al archivo, strings.xlm (en color rojo)
<resources>
<string
name="app_name">proyecto0009</string>
<string
name="BotonSiguiente">Siguiente</string>
<string name="tv1">Primer
Activity</string>
<string
name="BotonAnterior">Anterior</string>
<string name="tv2">Segunda
Activity</string>
</resources>
Asignamos los nombres de las etiquetas a los items de los
campos.


Y también ajusta el tamaño de texto en ambos
items a 24sp, verifica que estén en el tamaño adecuado es
importante que tengan el mismo tamaño para que se vea efecto de
cambio de activity en cuanto se intercambien.
Pasamos a la parte lógica de nuestra primer activity es decir
ActivityMain.java, donde crearemos un método para el botón, lo
haremos después de la función onCreate, (véase la siguiente
imagen), y escribimos lo siguiente:
public void siguiente(View view){
Intent siguiente = new
Intent(this,SegundoActivity.class);
}
cuando completamos la instrucción, android realizara una
auto completado como esto:

después de esta linea incluimos esto:
startActivity(siguiente);
quedando de esta forma

Regresamos a la parte de de diseño, y asignamos el botón al
evento onClic y lo asignamos siguiente [MainActivity]:

Nos pasamos al segundo activity, y de igual forma en
SegundoActivity.java realizamos las acciones semejantes pero ahora
realizamos el Intent con el anterior es decir con MainActivity:
public void anterior (View view){
Intent anterior = new
Intent(this, MainActivity.class);
startActivity(anterior);
}
se vera de esta forma:

pasamos a la parte gráfica y de nuevo asignamos el evento del
botón onClic al método anterior[SegundaActivity]

proyecto0010
Pasar datos o parámetros de una Activity a otra
Comenzamos de la forma tradicional que hemos usado creando
nuestro poyecto0010
Usaremos 2 activity, crearemos la primera, donde definimos los
intems:
En la primer activity usaremos los controles de
PlainText y Button, y en la segunda TextView y Button, iniciamos
con el diseño de la primer activity, nos adelantaremos para la
relación de los Items, en el archivo strings.xml, como en el caso
anterior crearemos los elementos para las 2 activity:

Creamos los controles sobre nuestro diseño, la primer app:

Control de Texto con
PlainText
Control Button
Usamos el casillero de hint para PlainText, usamos al
combinación Ctrl Espacio para solicitar la referencia
@string/etNombre1, y en el campo text use Nombre, para el ID de
PlainText usemos et1

Para el caso del botón usamos la casilla de text

y realizamos el ajuste de las distancias,
recuerde puedes realizarlo desde el diseño o blueprint, y revise
las distancias estas solo son sugerencias pero tu puedes
modificarlas , también usamos el textSize para dar tamaño de estas
(se sugiere de 24sp).

Observe que le botón ya tiene el titulo ENVIAR esto ya nos
indica que estamos asignando correctamente el nombre al Item.
Ahora como en el proyecto anterior crearemos una nueva activity

y usamos el siguiente nombre para esta nueva activity
(Main2Activity)

para esta nueva activity usaremos TextView, en
el anterior era PlainText, y de igual forma el botón para
regresar, hay que colocarlos en la misma ubicación, el tamaño de
texto, así como las posiciones relativas de los items, (podemos
colocarlo de forma diferente para distinguir entre las 2 activity)
en la siguiente imagen se han asignado los nombres y posiciones,
agreguemos el tv1 en el ID.
Asi quedara para el primer activity

y para el segundo activity

pasemos a la parte lógica (programar) de la primer activity:
aquí esta código de la primer activity:
package com.example.dell_windows81.proyecto0010;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText et1; //declaracion
de la id de forma privada
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.et1);
}
//
metodo para el boton enviar
public void enviar (View
view){
Intent i = new Intent(this, Main2Activity.class); //realizamos la conexion de esta activity a la
segunda
// creamos un objeto de Intent llamdo i donde nos
enfocaremos la llamada
i.putExtra("dato_enviado",et1.getText().toString());
//put Extra envia el objeto i a la variable
dato_enviado
// tomandolo de et1 que lo llamamos con getText,
y es pasado a String con toString
startActivity(i); ///realizamos la llamada a
la activity declarada en el objeto
}
}

pasamos a diseño y en el Item button lo asociamos al evento
onClic

Vayamos a la parte lógica Main2Activity.java
package com.example.dell_windows81.proyecto0010;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class Main2Activity extends AppCompatActivity {
private TextView tv1;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv1 =
(TextView)findViewById(R.id.tv1);
String dato_enviado =
getIntent().getStringExtra("dato_enviado");
//llamamos el valor o dato enviado
//
con la funcion getIntent y se pasa a tipo string con
getStringExtra revisar como se envia (putExtra)
tv1.setText("Hola
recibiendo :"+dato_enviado); // forma de presentar el dato recibido, primero el
texto para
//anunciar
lo que se transporta y el dato enviado
}
// metodo para
regresar a la primer activity
public void regresar (View view){
Intent i = new
Intent(this,MainActivity.class); //creamos un
objeto i de la clase Intent
startActivity(i); // se realiza la ejecucion del Activity
}
}
Realizamos la relación con el evento onClic, por ultimo revise
la longitud del mensaje si es necesario ajuste la longitud
del texto.

proyecto0011
WebView es una aplicación proporcionada por
Android a la que los desarrolladores tienen acceso a la hora de
programar sus aplicaciones. ¿Cuantas veces estas en una
aplicación y en un cierto momento ha recurrido a una página de
Internet para, por ejemplo, realizar un pago? Pues eso es WebView,
el navegador integrado en una aplicación, como ocurre también en
Facebook, Twitter, etc.
Claro esta, el desarrollador puede poner a
disposición del usuario que se abra en el navegador interno o bien
dar la opción de abrir en el navegador web que tenga instalado en
el dispositivo. Pero harba ocasiones, como en los pagos, que no
tengamos opción.
Como hemos comentado anteriormente, el WebView
es una aplicación nativa de Android. Google WebView es la
aplicación que hace de visor de paginas web nativo de Android.
Es la aplicación del sistema operativo más propensa a recibir
ataques de paginas web maliciosas. El
soporte lo da exclusivamente Google para los dispositivos Android
y podemos decir que es el firewall de nuestros smartphones
Hasta la versión Android 5.0 Lollipop de
Android, eran los propios fabricantes los responsables de lanzar
los parches de seguridad con actualizaciones del sistema. Ahora,
Google se encarga de esta tarea gracias a las actualizaciones del
componente WebView a través de Google Play Store. Esto facilita la
corrección de fallos de seguridad en menos tiempo y en un mayor
número de dispositivos.
Iniciamos de la forma habitual y en el diseño sera de esta
forma:
Agregamos un control de tipo PlainText, y un control de botón.
Para PlainText usamos el ID txt_web

Realizamos el ajuste de las distancias entre los items, con
blueprint.

Vamos al archivo strings.xml, y lo modificamos de esta forma:
<resources>
<string
name="app_name">proyecto0011</string>
<string name="txt_web">Ingresa el
sitio</string>
<string name="BotonIr">Ir al
sitio</string>
<string
name="BotonCerrar">Cerrar</string>
</resources>

Asignamos @string a los items
y retiramos del Campo name
lo que contiene
Agregamos @string para el botón.

Creamos otra activity (Empty Activity)

Establecemos un nombre a esta nueva Activity (ActivityWeb)

Terminando el proceso veremos que tenemos 5
pestañas en al parte superior podemos acomodarlos arrastrando
estos juntos a sus correspondientes desarrollos.

En esta nueva activity agregamos el control WebView de Widgets,
y un botón, debemos ajustar las distancias para que puedan se ver
ambos objetos


El control WebView se le asignara su ID como wv1, y previamente
ya teniamos la asignacion de segundo botón
y se asignamos el tamaño del botón a 24sp
Pasamos a la primer activity para realizar el Intent de esta
activity a la segunda (ActivityWeb), el codigo es el siguiente es
muy similar a los anteriores ejemplos:
package com.example.dell.proyecto0011;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
//creamos un objeto
private EditText et1;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1 =
(EditText)findViewById(R.id.txt_web); //
tomamos el valor asignado y se pasa al objeto
}
// metodo botón ir
public void navegar (View
view){
Intent i = new Intent(this, ActivityWeb.class);
i.putExtra("sitioWeb",et1.getText().toString());
startActivity(i);
}
}
Se asigna el botón con el evento onClic.

para realizar la navegación haremos los siguientes cambios en
ActivityWeb.java :
package com.example.dell.proyecto0011;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
public class ActivityWeb extends AppCompatActivity {
WebView wv1; // realizamos la encapsulacion tipo
java que es de tipo public cuando no se declara al comienzo
// es porque tenemos que acceder de forma publica al WEB
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
wv1 =
(WebView)findViewById(R.id.wv1);
String URL =
getIntent().getStringExtra("sitioWeb"); //de la activity anterior se
toma el valor sitoweb
// lo tomamos con
getIntent().getStringExtra
wv1.setWebViewClient();
}
}
en esta ultima linea debemos hacer una aclaración, cuando
escribimos setWeb, nos presentara lo siguiente:

nos mostrara 2 opciones nosotros debemos seleccionar
setWebViewClient, la razón es que si seleccionamos la primera nos
lanzara en navegador de Chrome y saldría de la aplicacion, para la
otra opción podr´a regresar a la app anterior.
completamos esta linea de la siguiente forma
wv1.setWebViewClient(new WebViewClient());
ahora terminemos el código :
package com.example.dell.proyecto0011;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class ActivityWeb extends AppCompatActivity {
WebView wv1; // realizamos
la encapsulacion tipo java que es de tipo public cuando no se
declara al comienzo
//
es porque tenemos que acceder de forma publica al WEB
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
wv1 =
(WebView)findViewById(R.id.wv1);
String URL =
getIntent().getStringExtra("sitioWeb"); //de
la activity anterior se toma el valor sitoweb
// lo tomamos con
getIntent().getStringExtra
wv1.setWebViewClient(new
WebViewClient()); // significa que no se salga
de esta acción
wv1.loadUrl("http://"+URL); // carga la
pagina (URL) y agregamos "http://" para que se complete la
direccio
}
// metodo del boton
regresar
public void cerrar (View view){
finish(); //con
esto cerramos por completo la activity
//
como ejercicio deberas de programar para que se regrese a la
activity inicial
}
}
y asignamos el botón de regresar al evento onClic

A continuación debemos dar permisos para
navegar por Internet, no se toma de forma inmediata la navegación,
recordemos que nuestro celular es un (gadget) dispositivo, e
Internet es un servicio que no pertenece a nuestro móvil.
para ello usamos otro elemento del lado
izquierdo que se llama manifiest (Manifiesto) es donde se
encuentran los permisos de la activity, seleccionamos este
elemento y nos presentara :

del lado derecho ubicamos la linea:
package="com.example.dell.proyecto0011">
(recuerden que este nombre dependera de la computadora que
usen.)
debajo de la linea deberemos escribir lo siguiente, android
studio les mostrara lo siguinte, y seleccionamos
android.permission.INTERNET :


<uses-permission
android:name="android.permission.INTERNET"/> se genera hasta la ultima comilla doble "
agregue manualmente la barra diagonal /, de lo contrario
marca error.
con ello estara completa la activity.
Nota: en algunos celulares podría no verse correctamente el
botón CERRAR solo ajusten el ´area del WebView, reducir hasta
lograr ver el botón.
REFERENCIAS
proyecto0009
https://developer.android.com/guide/components/intents-filters?hl=es-419
proyecto0010
https://es.stackoverflow.com/questions/36902/enviar-datos-entre-activities
http://jonsegador.com/2012/02/paso-de-datos-variables-entre-actividades-android/
Proyecto0011
https://elandroidelibre.elespanol.com/2015/06/que-es-webview-y-por-que-tengo-que-actualizarlo.html
https://www.ceac.es/blog/el-webview-todo-lo-que-necesitas-saber-de-esta-app
https://developer.chrome.com/multidevice/webview/gettingstarted