viernes, 8 de enero de 2016

Explicación de los Intents en Android Studio

   



Este articulo es para que tengan una idea general de que son los intents en android aprendiendo conceptos básico y sepa cuando se deben utilizar. Por esta razón habrán enlaces hacia otros artículos que profundizaran en los temas que aquí se hablan de una forma mas general.

Intenciones en android, Cualquier aplicación Android comprende una o más actividades. Con el fin de poner en marcha otra de las actividades de una actividad en particular (por ejemplo, el lanzamiento un RegistrorActivity) para hacer esto debemos  de utilizar un componente de Android llamado Intent. Un Intent es básicamente una intención de hacer una acción. Es una manera de comunicarse entre los componentes de Android (no sólo actividades) para solicitar una acción desde diferentes componentes. Es como un mensaje que Android escucha y reacciona mediante la identificación e invocando componentes adecuados de la aplicación apropiada (como una actividad, servicio, proveedor de contenidos, etc.) dentro de la misma aplicación o alguna otra aplicación. 

Con el uso de las intenciones se puede lograr muchas cosas como navegar de una actividad a otra, iniciar la actividad de una aplicación externa para que el usuario puede alcanzar tareas como la toma de fotografías a través de aplicación de la cámara, recogiendo un contacto mediante la aplicación Contactos, fijando ubicación en mapas utilizando google mapas, enviando un correo electrónico a través de gmail, compartiendo estado utilizando WhatsApp o facebook, etc.

Existen dos tipos de Intent (intenciones):

  • Intención explícita: Al crear un objeto Intención cuando especificamos explícitamente y transmitimos el nombre del componente de destino directamente en el intento, es un intento explícito. En otras palabras, designamos explícitamente el componente de destino. Lo explicare mejor mas adelante.
  • Intención implícita: En este caso delegamos la tarea de evaluar los componentes registrados (el registro se hace por lo general el uso de filtros en la intención que vamos a cubrir más adelante) para Android basada en los datos de intención y la acción prevista (como enviar un correo electrónico, capturar una foto , la ubicación pin en un mapa, etc.) que se pasa.  
Normalmente utilizamos las intenciones explícitas para disparar componentes de nuestra propia aplicación, mientras que las intenciones implícitas para poner en marcha los componentes de otras aplicaciones de terceros.


Intent explícito:

Una intención explícita es más comúnmente utilizado en el lanzamiento de una actividad, dentro de la misma aplicación. Vamos a ver un ejemplo de una intención explícita de inmediato:

En el MainActivity.java
Intent intent = new Intent(this, FormularioActivity.class);
startActivity(intent);

Con este código anterior tratamos de lanzar FormularioActivity.java desde MainActivity.java; de esta forma la actividad FormularioActivity.java se coloca en la parte superior de la pila de la actividades. Tenemos una instancia de la clase Intent pasando el contexto actual y el nombre del componente que necesita ser iniciado o (lanzado). Entonces llamamos startActivity () y pasamos nuestra intención. Esto simplemente lanzar el FormularioActivity desde la misma aplicación justo encima del MainActivity. Piense en las posibilidades para usarlo cómo hacemos click a enlaces, enviar informacion a formularios o enviarlos a la web para navegar a otras páginas web.

Podemos agregar datos a nuestra intención  que se puede recuperarse por la actividad de recepción:

En el FormularioActivity.java
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("nombre", "Pedro");
intent.putExtra("edad", 22);
 
startActivity(intent);

Acabamos de trasladar dos fragmentos de datos, el primer dato es una cadena y el otro es un entero. La clave o key con el cual vamos a poder identificar el dato que queremos recuperar debe ser cadena, en este caso el key que les vemos puesto es "nombre" y "edad". Como valores podemos utilizar los tipos de datos primitivos como  (int, double, etc.), así como objetos de tipo CharSequence, String, Bundle, Parceable y Serializable. Vamos a ver cómo recuperamos estos datos cuando se puso en marcha la nueva Actividad (dentro onCreate (), por ejemplo).

Estando en el MainActivity recuperando los datos enviados desde FormularioActivity.java
Bundle extras = getIntent().getExtras();
 
if (extras != null) {//ver si contiene datos
  String datoNombre= extras.getString("nombre");//Obtengo el nombre
  int datoEdad= extras.getInt("edad");//Obtengo la edad
}

Así que llamando a getExtras() en nuestro objeto Intent nos da un "Bundle"  objeto sobre el que podemos llamar a varios métodos como getString () , getInt (), getChar (), etc. para recuperar varios valores que se transmiten. 
Durante todo este concepto de intenciones explícita y de ejemplos tendremos que asegurarnos de que las actividades esten listados en AndroidManifest.xml (manifiesto de la aplicación). Debe ser algo como esto:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.codigojavalibre.cesargarcia.explicaciondewrap_content_fill_parentomatch_parent" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".FormularioActivity"
            android:label="@string/app_name">        </activity>

    </application>

</manifest>

Intent implícito:

Una intención implícita especifica una acción que puede invocar a cualquier aplicación en el dispositivo capaz de realizar la acción. Usando una intención implícita es útil cuando su aplicación no puede realizar la acción, pero otras aplicaciones, probablemente, puede y desea que el usuario elija qué aplicación utilizar para realizar esta acción.

Cuando trabajamos con las intenciones implícitas, por lo general, tenemos que especificar la acción que queremos realizar y opcionalmente brindar algunos datos necesarios para esa acción. Los datos se expresan típicamente como un URI que puede representar una imagen en la galería o a una persona en la base de datos de contactos. Un ejemplo hará que esta idea sea mucho más clara.

En el MainActivity.java
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(intent);

Así que lo que hicimos fue especificar una acción a realizar, que en este caso es ACTION_VIEW que conduce a lo más razonable que se produzca en este caso sobre la base de la URI HTTP, que es mostrar la página web en un navegador. Nosotros implícitamente insinuamos que el usuario quiere ver www.google.com a través de la aplicación. Ahora, en lugar de mostrar la página web en un WebView decidimos utilizar otra aplicación (navegador Chrome, por ejemplo) que el sistema ya incluye. así de fácil!

Por si no le halla quedado claro los intents explícitos e implícitos, aquí esta el resumen:

  • Intentos explícitos se utilizan para llamar a un componente específico. Cuando usted sabe qué componente desea iniciar y usted no quiere dar el control libre al usuario sobre qué componente debe usar. Por ejemplo, usted tiene una aplicación que tiene 2 actividades. Activity A y la Activity B. Usted quiere iniciar la actividad B desde la actividad A. En este caso, se define una intención explícita.
  • Intentos implícitos se utilizan cuando se tiene una idea de lo que quieres hacer, pero no saben qué componente debe ser lanzado. O si se quiere dar la opción de elegir entre una lista de componentes para que utilice el usuario. Si estas Intenciones se envían al sistema Android que busca todos los componentes que están registrados para la acción específica y el tipo de datos. Si no se encuentra un solo componente, Android se inicia el componente directamente. Por ejemplo, usted tiene una aplicación que utiliza la cámara para tomar fotos. Una de las características de su aplicación es que usted le da al usuario la posibilidad de enviar las fotos que ha tomado. Usted no sabe qué tipo de aplicación tiene el usuario para enviar fotos, y usted quiere dar la opción de elegir qué aplicación externa puede usar el usuario para realizar dicha acción. En este caso, no usaría una intención explícita. En su lugar debe usar una intención implícita que tiene un conjunto de medidas como ACTION_SEND.

César GI

About César GI

Lo que me importa es poder enseñar lo poco que se, por que asi como yo aprendo leyendo gracias a las personas que comparten sus conocimiento yo tambien quiero ayudar a la comunidad en español aportando lo poco que he aprendido hasta el momento.