Android: ejemplos de llamadas a Intents
Los filtros de Intents son, desde mi punto de vista, una de las características más potentes de Android. Nos permiten reutilizar componentes de otras aplicaciones usando muy pocas líneas de código.
“¿Para que voy a programar una Activity de captura de fotos cuando puedo llamar a la de la aplicación de cámara incluida en el sistema?”
Os dejo un ejemplo sencillo en el que se realizan varias llamadas para ilustrarlo:
Más información en la Guia Android y el listado de Intents que nos facilita Android
/**
* Intent samples
* http://francho.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.francho.test.intents;
import java.util.HashMap;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class IntentsActivity extends Activity {
private static final int REQUEST_PHOTO = 1;
private HashMap<String, Intent> mPruebas;
private LinearLayout mContainer;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContainer = new LinearLayout(this);
mContainer.setOrientation(LinearLayout.VERTICAL);
mContainer.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
setContentView(mContainer);
Intent intent;
// Web
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://francho.org/"));
createButton("Web", intent);
// Web filtrada
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/"));
createButton("Google maps (web)", intent);
// Geo (maps)
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:41.656313,-0.877351"));
createButton("Google maps geopunto", intent);
// Llamadas
intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:976123123"));
createButton("Llamada telefónica", intent);
// Enviar texto (sencillo)
intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "asunto de prueba");
intent.putExtra(Intent.EXTRA_TEXT, "probando el envio");
createButton("compartir (selector)", intent.createChooser(intent, "enviar"));
// enviar un mail
intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "asunto de prueba");
intent.putExtra(Intent.EXTRA_TEXT, "probando el envio");
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"sheldon@cooper.com"});
createButton("Mail To", intent);
// tomar una foto
intent = new Intent("android.media.action.IMAGE_CAPTURE");
createButton("Tomar foto", intent, REQUEST_PHOTO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK) {
Bundle extras;
switch(requestCode) {
case REQUEST_PHOTO:
extras = data.getExtras();
String result = data.toURI();
Toast.makeText(IntentsActivity.this, result, Toast.LENGTH_LONG).show();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
protected void createButton(String label, Intent intent) {
createButton(label, intent, null);
}
protected void createButton(String label, Intent intent, Integer requestCode) {
Button btn = new Button(this);
btn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
btn.setText(label);
btn.setOnClickListener(new BtnOnClickListener(intent, requestCode));
mContainer.addView(btn);
}
class BtnOnClickListener implements OnClickListener {
private Intent mIntent;
private Integer mRequestCode;
BtnOnClickListener(Intent intent, Integer requestCode) {
mIntent = intent;
mRequestCode = requestCode;
}
public void onClick(View v) {
try {
if( mRequestCode != null) {
startActivityForResult(mIntent, mRequestCode);
} else {
startActivity(mIntent);
}
} catch(Exception e) {
Toast.makeText(IntentsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
}
}
Actualización 9-Nov-2011
Subido el código fuente de este proyecto a Github: https://github.com/francho/francho.org-lab/tree/master/0806-LlamadasIntents
Publicado el 11 abril, 2011 en Android y etiquetado en Android, ejemplo, Intents. Guarda el enlace permanente. 17 comentarios.

y en el main ke va si pongo solo ese codigo en lo de java entonces en el main ke va ?????
Es una aplicación Android, que no tiene main, a diferencia de una aplicación en Java. Lo más parecido al main sería el contenido del onCreate(), pero ya te digo es Android (Sin ir más lejos el SetContentView no te lo cogerá)
Mary acabo de subir el código fuente del proyecto completo a Github.
Tienes el enlace al pie del artículo.
Espero que te sirva.
el ejemplo esta genial pero cuando lo intento abrir , no sirve al exportar… no entiendo como es que lo tengo que hacer, espero me puedan ayudar
Si no quieres exportar el repositorio entero de github debes crear un proyecto que siga la estructura y tenga el mismo contenido que:
https://github.com/francho/francho.org-lab/tree/master/0806-LlamadasIntents
(Este proyecto está preparado para ser Compilado con Eclipse + Android ADT)
Saludos
Gracias por la info
Hola, tengo una duda se puede abrir cualquier aplicación que tengas instalada en tu android mediante un intent?, si es asi como puedes conocer el formato de las llamadas?
gracias.
Si, si conoces la llamada o los filtros puedes llamar a cualquier Activity o servicio.
Normalmente la documentación de la app llamada debe darte los filtros de intent o llamada a usar.
Tambien puedes fijarte en los logs del sistema: enchufas el terminal a tu ordenador abres los logs (por ejemplo desde el Eclipse), arrancas la aplicación y te fijas que intent se ha llamado.
Saludos
francho me gustaria que me explicases si vos podes , el como acceder a la opcion descolgar la llamada en android, si podes mandame un correo a la direccion que os puse al enviar este coment y me comentas por ahi, gracias.
un saludo
David,
La verdad es que nunca me he puesto con el tema de llamadas. De todas formas supongo que se hará a través de TelephonyManager (http://developer.android.com/reference/android/telephony/TelephonyManager.html) o de algún tipo de BroadcastReceiver
Saludos
Hola que tal quería consultarte si sabes como interactuar con la aplicaicón google maps para pasarle dos posiciones y que me muestre el camino entre los dos puntos.
Gracias.
Buenas tarde suna pregunta como hacer en mi aplicacion cuando oprimo la tecla BACK y me saque al menu del celular… que no sea solo con la tecla HOME, gracias y buen post.
Mauma lo del botón atrás se consigue modificando la forma en la que las Activity se apilan. Tienes un artículo al respecto en la documentación oficial:
http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
Gracias por la respuesta, estuve probando las diferentes formas que en el árticulo y no he logrado comprender si me ayuda con un ejemplo.
tengo una parte de Login -> Menu Principal -> Boton 1… etc
Quiero que cuando el usuario despues de loguearse al estar en el menú principal y al oprimir el BACK salga al HOME del dispositivo.??
Gracias
a ver si puedo sacar un rato y preparo un artículo sobre la pila.
saludos
Lugh debes crear un intent de tipo ACTION_VIEW y montar una url similar a la de la web de Google Maps, si tienes la app oficial instalada (como tiene los filtros correspondientes definidos) la abrirá.
Un ejemplo de llamada sería
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(“http://maps.google.com/maps?saddr=”+latitude_source+”,”+longitude_source+”&daddr=”+destinotLatitud+”,”+destinoLongitud));
startActivity(intent);
Pingback: Bitacoras.com