Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "[email protected]");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");
startActivity(Intent.createChooser(intent, "Send Email"));
El código anterior abre un cuadro de diálogo que muestra las siguientes aplicaciones: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype, etc.
En realidad, quiero filtrar estas opciones de lista. Quiero mostrar solo aplicaciones relacionadas con el correo electrónico, por ejemplo, Gmail, Yahoo Mail. ¿Cómo hacerlo?
He visto ese ejemplo en la aplicación 'Android Market'.
- Abra la aplicación Android Market
- Abra cualquier aplicación donde el desarrollador haya especificado su dirección de correo electrónico. (Si no puede encontrar dicha aplicación, simplemente abra mi aplicación: - market: // details? Id = com.becomputer06.vehicle.diary.free, O busque por 'Vehicle Diary')
- Desplácese hacia abajo hasta 'DESARROLLADOR'
- Haga clic en 'Enviar correo electrónico'
El cuadro de diálogo muestra solo aplicaciones de correo electrónico, por ejemplo, Gmail, Yahoo Mail, etc. No muestra Bluetooth, Orkut, etc. ¿Qué código produce dicho cuadro de diálogo?
android
email
android-intent
dira
fuente
fuente
String[]
, no solo aString
como se muestra aquí.Respuestas:
cuando cambiarás tu intent.setType como a continuación obtendrás
Use
android.content.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. Ex:No te sugiero que accedas directamente a la aplicación de correo electrónico. Deje que el usuario elija su aplicación de correo electrónico favorita. No lo obligues.
Si usa ACTION_SENDTO, putExtra no funciona para agregar asunto y texto a la intención. Use Uri para agregar el asunto y el texto del cuerpo.
EDITAR: podemos usar en
message/rfc822
lugar de"text/plain"
como el tipo MIME. Sin embargo, eso no indica "ofrecer solo clientes de correo electrónico", indica "ofrecer cualquier cosa que admita datos de mensajes / rfc822". Eso podría incluir fácilmente algunas aplicaciones que no son clientes de correo electrónico.message/rfc822
admite tipos MIME de.mhtml, .mht, .mime
fuente
no apps installed to perform this intent
cuándo lo usoACTION_SENDTO
. Estoy usando Android 4.1.2 y tengo una aplicación de correo electrónico instalada ...message/rfc822
. Eso no es lo mismo que enviar un correo electrónico. Utilice elmailto:
protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.La respuesta aceptada no funciona en 4.1.2. Esto debería funcionar en todas las plataformas:
Espero que esto ayude.
Actualización: Según marcwjj , parece que en 4.3, necesitamos pasar una matriz de cadenas en lugar de una cadena para la dirección de correo electrónico para que funcione. Es posible que necesitemos agregar una línea más:
Enlace de referencia
fuente
Uri.fromParts("mailto", "", null)
Hay tres enfoques principales:
1. Personalizado
Uri
:2. Uso de
Intent
extras:3. Biblioteca de soporte
ShareCompat
:fuente
%
símbolo en el búfer, algunos caracteres en el correo electrónico resultante no se codificarán correctamente. Debes realizar elUri.encode
baile sugerido por @minipif.Esto se cita del documento oficial de Android, lo he probado en Android 4.4 y funciona perfectamente. Ver más ejemplos en https://developer.android.com/guide/components/intents-common.html#Email
fuente
EXTRA_EMAIL
no funciona para mí, así que solíaUri.parse("mailto: " + myEmail)
Una respuesta tardía, aunque descubrí una solución que podría ayudar a otros:
Versión Java
Versión Kotlin
Esta fue mi salida (solo se sugiere Gmail + Bandeja de entrada):
Obtuve esta solución del sitio de desarrolladores de Android .
fuente
mailto
el correo electrónico y:mailto:[email protected]
Esto funciona para mi:
es decir, usar la
ACTION_SENDTO
acción en lugar de laACTION_SEND
acción. Lo probé en un par de dispositivos Android 4.4 y limita la ventana emergente del selector para mostrar solo aplicaciones de correo electrónico (correo electrónico, Gmail, Yahoo Mail, etc.) e inserta correctamente la dirección de correo electrónico y el asunto en el correo electrónico.fuente
Tratar:
fuente
message/rfc822
. Eso no es lo mismo que enviar un correo electrónico. Utilice elmailto:
protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.Esta es la forma correcta de enviar la intención de correo electrónico de acuerdo con la Documentación oficial del desarrollador de Android
Agregue estas líneas de código a su aplicación:
Opcional: agregue el cuerpo y el asunto, así
Ya agregó esta línea, pero es bueno tenerla para nuevos usuarios
Esta será la dirección del destinatario, lo que significa que el usuario le enviará a usted (el desarrollador) un correo electrónico.
fuente
Finalmente, encuentre la mejor manera de hacerlo
fuente
Si solo desea los clientes de correo electrónico que debe usar
android.content.Intent.EXTRA_EMAIL
con una matriz. Aquí va un ejemplo:fuente
ACTION_SENDTO
El siguiente código me funciona bien.
fuente
De los documentos de desarrolladores de Android :
fuente
Editar: ya no funciona con nuevas versiones de Gmail
Esta fue la única forma que encontré en ese momento para que funcionara con cualquier personaje.
La respuesta de doreamon es el camino correcto ahora, ya que funciona con todos los personajes en las nuevas versiones de Gmail.
Vieja respuesta:
Aquí esta el mio. Parece que funciona en todas las versiones de Android, con soporte de cuerpo de asunto y mensaje, y soporte completo de caracteres utf-8:
fuente
Uri.encode
es el camino correcto a seguir. Pero, ¿por qué llamarlo dos veces por sujeto y cuerpo?Ninguna de estas soluciones funcionaba para mí. Aquí hay una solución mínima que funciona en Lollipop. En mi dispositivo, solo Gmail y las aplicaciones de correo electrónico nativas aparecen en la lista de selección resultante.
fuente
Funciona en todas las versiones de Android:
fuente
¡El siguiente código funcionó para mí!
fuente
Esto funciona para mí perfectamente bien:
fuente
Si desea asegurarse de que su intención sea manejada solo por una aplicación de correo electrónico (y no por otras aplicaciones de mensajería de texto o sociales), utilice la
ACTION_SENDTO
acción e incluya el esquema de datos "mailto:". Por ejemplo:Encontré esto en https://developer.android.com/guide/components/intents-common.html#Email
fuente
en Kotlin si alguien está mirando
fuente
La mayoría de estas respuestas funcionan solo para un caso simple cuando no está enviando datos adjuntos . En mi caso, a veces necesito enviar archivos adjuntos (ACTION_SEND) o dos archivos adjuntos (ACTION_SEND_MULTIPLE).
Así que tomé los mejores enfoques de este hilo y los combiné. Utiliza bibliotecas de soporte,
ShareCompat.IntentBuilder
pero solo muestro aplicaciones que coinciden con ACTION_SENDTO con "mailto:" uri. De esta manera obtengo solo una lista de aplicaciones de correo electrónico con soporte para archivos adjuntos:fuente
El uso
intent.setType("message/rfc822");
funciona, pero muestra aplicaciones adicionales que no necesariamente manejan correos electrónicos (por ejemplo, GDrive). UsandoIntent.ACTION_SENDTO
consetType("text/plain")
es la mejor, pero hay que añadirsetData(Uri.parse("mailto:"))
para conseguir los mejores resultados (sólo aplicaciones de correo electrónico). El código completo es el siguiente:fuente
Si desea apuntar a Gmail, puede hacer lo siguiente. Tenga en cuenta que la intención es "ACTION_SENDTO" y no "ACTION_SEND" y los campos de intención adicionales no son necesarios para Gmail.
fuente
Estoy actualizando la respuesta de Adil en Kotlin,
fuente
Utilice el siguiente código:
fuente
Quizás deberías probar esto:
intent.setType("plain/text");
Lo encontré aquí . Lo he usado en mi aplicación y solo muestra las opciones de correo electrónico y Gmail.
fuente
plain/text
, y que ni siquiera es un tipo MIME válido. Eso no es lo mismo que enviar un correo electrónico. Utilice elmailto:
protocolo en su lugar, porque eso es lo que los clientes de correo electrónico realmente entienden.Redacte un correo electrónico en el cliente de correo electrónico del teléfono:
fuente
Utilizar este:
usar build gradle:
fuente
Esto es lo que uso, y funciona para mí:
Esto también permitirá al usuario elegir su aplicación de correo electrónico preferida. Lo único que esto no le permite hacer es configurar la dirección de correo electrónico del destinatario.
fuente
"
en la segunda línea.fuente
fuente