una - email intent android
Enviar correo electrónico a través de gmail (6)
Tengo un código de intenciones de incendios para enviar correos electrónicos
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_EMAIL,
new String[] { to });
i.putExtra(Intent.EXTRA_SUBJECT, subject);
i.putExtra(Intent.EXTRA_TEXT, msg);
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(Start.this,
"There are no email clients installed.",
Toast.LENGTH_SHORT).show();
}
Pero cuando se dispara esta intención, veo muchos elementos en la lista como aplicación de sms, aplicación de gmail, aplicación de Facebook, etc.
¿Cómo puedo filtrar esto y habilitar solo la aplicación de Gmail (o tal vez solo enviar aplicaciones por correo electrónico)?
Esto se cita del documento oficial de Android, lo he probado en Android 4.4 y funciona perfectamente. Vea más ejemplos en https://developer.android.com/guide/components/intents-common.html#Email
public void composeEmail(String[] addresses, String subject) {
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
}
La respuesta aceptada no funciona en el 4.1.2. Esto debería funcionar en todas las plataformas:
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
startActivity(Intent.createChooser(emailIntent, "Send email..."));
Espero que esto ayude.
La respuesta de Igor Popov es 100% correcta, pero en caso de que quiera una opción alternativa, utilizo este método:
public static Intent createEmailIntent(final String toEmail,
final String subject,
final String message)
{
Intent sendTo = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:" + Uri.encode(toEmail) +
"?subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(message);
Uri uri = Uri.parse(uriText);
sendTo.setData(uri);
List<ResolveInfo> resolveInfos =
getPackageManager().queryIntentActivities(sendTo, 0);
// Emulators may not like this check...
if (!resolveInfos.isEmpty())
{
return sendTo;
}
// Nothing resolves send to, so fallback to send...
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");
send.putExtra(Intent.EXTRA_EMAIL,
new String[] { toEmail });
send.putExtra(Intent.EXTRA_SUBJECT, subject);
send.putExtra(Intent.EXTRA_TEXT, message);
return Intent.createChooser(send, "Your Title Here");
}
Reemplazar
i.setType("text/plain");
con
// need this to prompts email client only
i.setType("message/rfc822");
Utilice android.content.Intent.ACTION_SENDTO
( new Intent(Intent.ACTION_SENDTO);
) para obtener solo la lista de clientes de correo electrónico, sin facebook u otras aplicaciones. Solo los clientes de correo electrónico.
No sugeriría que vaya directamente a la aplicación de correo electrónico. Permita que el usuario elija su aplicación de correo electrónico favorita. No lo constriñes.
Si usa ACTION_SENDTO, putExtra no funciona para agregar sujeto y texto a la intención. Use Uri para agregar el tema y el texto del cuerpo.
Ejemplo
Intent send = new Intent(Intent.ACTION_SENDTO);
String uriText = "mailto:" + Uri.encode("[email protected]") +
"?subject=" + Uri.encode("the subject") +
"&body=" + Uri.encode("the body of the message");
Uri uri = Uri.parse(uriText);
send.setData(uri);
startActivity(Intent.createChooser(send, "Send mail..."));
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","[email protected]", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "IndiaTV News - Mobile App Feedback");
emailIntent.putExtra(Intent.EXTRA_TEXT,Html.fromHtml(Settings.this.getString(R.string.MailContent)));
startActivityForResult(Intent.createChooser(emailIntent, "Send email..."),0);