Utilizando Intents implícitos para crear actividades

Antes de comenzar la actividad de desarrollo vamos a definir de que se trata, cuando establecemos que utilizaremos intents implícitos en la solución mobile de Android.
Los intents implícitos se utilizan cuando no se especifica un componente exacto a utilizar, en su lugar, se especifica la funcionalidad requerida a través de una acción (por ejemplo, 'ver', 'hacer búsqueda', 'marcar') y un dato (por exemplo, la URL de la página que se desea ver, el número que se desea marcar), y Android debe determinar el mejor componente para su utilización. Esa es una de las características más interesantes de Android, porque permite que una aplicación desencadene un “Intent” sin conocer exactamente cuál será la aplicación o componente que lo recibirá, y por eso puede interactuar con otras aplicaciones de manera muy flexible
El filtro más comunmente utilizado es una acción, y la acción más común tiene que ver con el modo ACTION_VIEW.

Los pasos básicos para lanzar una actividad utilizando un “intent implícito” serían:
  • Declarar el “intent” con la acción apropiada apropiada por ejemplo, ACTION_VIEW, ACTION_WEB_SEARCH, etc.
  • Adjuntar información adicional necesaria según la acción del intent.
  • Lanzar el intent (y dejar que el sistema encuentre la Actividad más adecuada).
Vamos a generar un ejemplo programático que nos permita comprender el mecanismo de utilización de los “intents” en Android.
Los intents son muy utilizados en todos los desarrollos mobile que se generen en Android, como les comenté podemos optar por utilizarlos de forma explicita o implícita, la segunda de las opciones es la seleccionada para este articulo.
Tecnología

- Android 2.3.3
- Entorno de desarrollo Eclipse (Helios)

Actividad simple utilizando intents implícitos


En primer lugar, vamos a generar una actividad simple que nos permita reaccionar a un evento. La idea, es una interfaz grafica simple con un botón que permita realizar el lanzamiento de diversas opciones de intents útiles, que podemos requerir para un desarrollo mobile.

Tendremos que resolver estás situaciones:

- Navegar en un sitio Web
- Abrir los contactos de mi directorio y navegar en ellos.
- Iniciar una llamada telefonica en un número especifico.
- Realizar un busqueda en Google pasando una cadena de búsqueda.
- Comando de voz

En cada una de las actividades declaradas, utilizaremos un manejador del click de un botón para lanzar el “intent”.

Button btnLanzar = (Button)findViewById(R.id.button1);
       btnLanzar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {


}
});
Code 1 - Manejador del botón lanzar.

Utilizaremos “startActivity(intent)”  para iniciar la actividad, esta operación pertenece al paquete “android.app” particularmente a la clase “Activity”, esta operación inicia una actividad, pero como característica fundamental es necesario comentar, de la misma no recibiremos información al cerrarse.
Puede ampliar esta información en el siguiente vínculo oficial Ver. (Inglés)

Como parámetro la operación “startActivity” genéricamente llevará un “intent” y algun otro dato. Veamos la estructura de un “intent”.
El “intent” pertenece al paquete “android.content”. Se puede decir que un “intent” es una descripción abstracta de una operación que se realizará. Su uso más importante es el inicio de las actividades, en el que se puede considerar como el pegamento entre las actividades en la soluciones mobile Android

Sus principales componentes son:
- Una Acción
- Datos (expresado como URI)

Puede ampliar esta información en el siguiente vínculo oficial Ver. (Inglés)
Navegar por un sitio Web

En este ejemplo utilizaremos la creación de un nuevo “intent” con la acción “ACTION_VIEW” y como datos pasaremos la dirección web “http://www.google.com/”.

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.com/")));
Code 2 - Lanzamiento de un “intent” para navegar por un sitio web.

Un aspecto importante a remarcar en este escenario es, no estamos necesariamente lanzando el Browser del sistema, lo que estamos haciendo es decirle al sistema que queremos ver la pagina “http://www.google.com”. El sistema tomará la decisión de cual es la aplicación más adecuada, que puede ser, el Browser del dispositivo o quizás otra aplicación que el usuario tenga instalado, podría ser otro Browser (Firefox, por ejemplo). Por esa razón este intent se llama implícito. No estamos especificando una aplicación o componente especifico.

Operar los contactos de mi directorio

En este ejemplo utilizaremos la creación de un nuevo “intent” con la acción “ACTION_VIEW” y como datos pasaremos “content://contacts..” para realizar la operación de visualización de contactos de mi directorio.

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("content://contacts/people/")));
Code 3 - Lanzamiento de un “intent” para abrir los contactos de mi directorio y navegarlos.

A remarcar “content://contacts/people/" es una URI que representa la colleción de contactos del directorio.

Iniciar una llamada telefonica

En este ejemplo utilizaremos la creación de un nuevo “intent” con la acción “ACTION_VIEW” y como datos pasaremos “tel:73647832” esto colocará la aplicación en el escenario de llamada telefonica para confirmar la llamada al número representado.

startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("tel:34247")));
Code 4 - Lanzamiento de un “intent” para utilizar la interfaz telefónica.

Realizar un busqueda en Google

En este ejemplo utilizaremos la creación de un “intent” pero lo realizaremos de forma separada inicialmente para luego poder insertar una Query al mismo. Hay algunos intents que necesitarán más que una acción y una URI. Esas datos adicionales se llaman "extras" y se los puede añadir con “Intent.putExtra” como muestra el ejemplo del Code 5.

Intent intent= new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, "Bortolotti");

startActivity(intent);
Code 5 - Lanzamiento de un “intent” con una búsqueda web.

Lanzamiento de un comando de voz

En este ejemplo utilizaremos la creación de un nuevo “intent” con la acción “ACTION_VOICE_COMMAND”

startActivity(new Intent(Intent.ACTION_VOICE_COMMAND));
Code 6 - Lanzamiento de un “intent” para relizar una llamada a comando de voz.

Vídeo de implementación



Código fuente de implementación

Descargar

Espero les sea de utilidad..

Referencias

- Sitio Oficial Android, http://developer.android.com/reference/, 2011.
- Manning Android in Action 2nd.Edition - W. Frank Ableson, Robi Sen, Chris King, 2011.
- The Android Developers Cookbook - Steele and To, 2010.

Entradas más populares de este blog

7 arquetipos #Polymer 1.0 puntos esenciales prácticos

El potencial de la nube en 5 pasos desde Buenos Aires y junto al ecosistema regional

Iniciando la representación de una mobile-web-page pensando en el rendimiento - Parte 1