La clase Intent, ademas de permitir abrir otra Activity de la misma aplicación, da la posibilidad de abrir otra aplicación diferente a la que estamos desarrollando. La aplicación que se inicie dependerá del tipo de acción que indiquemos y de los datos que se le entreguen. Para ello, deberás usar el método constructor de la clase Intent en el que se indica el tipo de acción y los datos que debes entregarle como objeto URI:
Intent (String action, Uri uri)
Existe una serie de constantes predefinidas en la clase Intent con las distintas acciones que puede solicitar nuestra aplicación. La acción más genérica es ACTION_VIEW, que abre la aplicación asociada al tipo de dato que se indique al crear el objeto Intent, a través de un objeto URI.
Por ejemplo, para ver una página web en uno de los navegadores web instalados en el dispositivo:
Uri paginaWeb = Uri.parse("http://www.javiergarciaescobedo.es");
Intent webIntent = new Intent(Intent.ACTION_VIEW, paginaWeb);
startActivity(webIntent);
Puedes iniciar la llamada a un número de teléfono indicando un URI de tipo tel. Esto lo puedes hacer con el tipo de acción genérico visto antes (ACTION_VIEW), o bien con la acción específica para realizar llamadas telefónicas: ACTION_DIAL.
Uri telefono = Uri.parse("tel:956123456");
Intent webIntent = new Intent(Intent.ACTION_DIAL, telefono);
startActivity(webIntent);
Para algunas acciones es necesario pasar algunos datos al Intent usando el método putExtra. Por ejemplo, para enviar un correo electrónico como puedes ver en el siguiente ejemplo (para poder utilizarlo debes configurar la aplicación de correo con una cuenta de correo):
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// El intent para envío (ACTION_SEND) no usa el parámetro URI, por lo que se declara el tipo "text/plain"
emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"usuario @ servidor.com"}); // destinatarios
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Asunto del mensaje");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Contenido del mensaje de correo");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://ruta/a/archivo/adjunto"));
startActivity(emailIntent);
Si deseas que el usuario puede elegir entre las aplicaciones instaladas en el dispositivo que son compatibles con el tipo de acción a realizar, debes iniciar la actividad Intent.createChooser a la que se le pasa el objeto Intent de la acción a realizar, junto con un texto que se mostrará al usuario como título de la selección. Por ejemplo, para el caso anterior:
startActivity(Intent.createChooser(emailIntent, "Enviar correo electrónico con ..."));
Antes de iniciar una Activity correspondiente a otra aplicacion, conviene comprobar que el dispositivo cuenta con una aplicación instalada adecuada para la acción que se quiere realizar. Para realizar esta comprobación se puede usar el método queryIntentActivities de la clase PackageManager. Dicho método retorna una lista de aplicaciones que pueden manipular la acción indicada. Si la lista está vacía, no habrá ninguna aplicación disponible.
Uri location = Uri.parse("geo:0,0?q=Herrera+Oria,+Ubrique,+Spain");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
if(activities.size() > 0) {
startActivity(mapIntent);
} else {
Toast aviso = Toast.makeText(this, "No hay ninguna aplicación disponible", Toast.LENGTH_SHORT);
aviso.show();
}