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]



Y el resultado debe ser como este

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