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"));
O código acima abre uma caixa de diálogo mostrando os seguintes aplicativos: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype etc.
Na verdade, quero filtrar essas opções de lista. Quero mostrar apenas aplicativos relacionados a e-mail, por exemplo, Gmail, Yahoo Mail. Como fazer isso?
Eu já vi esse exemplo no aplicativo 'Android Market'.
- Abra o aplicativo Android Market
- Abra qualquer aplicativo em que o desenvolvedor tenha especificado seu endereço de e-mail. (Se você não encontrar esse aplicativo, basta abrir meu aplicativo: - market: // details? Id = com.becomputer06.vehicle.diary.free, OU pesquise por 'Vehicle Diary')
- Role para baixo até 'DESENVOLVEDOR'
- Clique em 'Enviar email'
A caixa de diálogo mostra apenas aplicativos de e-mail, por exemplo, Gmail, Yahoo Mail etc. Não mostra Bluetooth, Orkut etc. Que código produz essa caixa de diálogo?
android
email
android-intent
dira
fonte
fonte
String[]
, não apenas a,String
como mostrado aqui.Respostas:
quando você alterar seu intent.setType, como abaixo, você receberá
Use
android.content.Intent.ACTION_SENDTO
para obter apenas a lista de clientes de email, sem facebook ou outros aplicativos. Apenas os clientes de email. Ex:Eu não sugeriria que você fosse diretamente ao aplicativo de e-mail. Deixe o usuário escolher seu aplicativo de email favorito. Não o restrinja.
Se você usar ACTION_SENDTO, o putExtra não funcionará para adicionar assunto e texto à intenção. Use Uri para adicionar o assunto e o texto do corpo.
Edição: podemos usar em
message/rfc822
vez de"text/plain"
como o tipo MIME. No entanto, isso não indica "apenas oferecer clientes de email" - indica "oferecer qualquer coisa que suporte dados de mensagem / rfc822". Isso pode facilmente incluir alguns aplicativos que não são clientes de email.message/rfc822
suporta tipos MIME de.mhtml, .mht, .mime
fonte
no apps installed to perform this intent
quando eu usoACTION_SENDTO
. Estou usando o Android 4.1.2 e tenho um aplicativo de e-mail instalado ...message/rfc822
. Isso não é o mesmo que enviar um email. Use omailto:
protocolo, pois é isso que os clientes de email realmente entendem.A resposta aceita não funciona no 4.1.2. Isso deve funcionar em todas as plataformas:
Espero que isto ajude.
Atualização: de acordo com marcwjj , parece que no 4.3, precisamos passar uma matriz de string em vez de uma string para o endereço de email para fazê-lo funcionar. Talvez seja necessário adicionar mais uma linha:
Link de referência
fonte
Uri.fromParts("mailto", "", null)
Existem três abordagens principais:
1. Personalizado
Uri
:2. Usando
Intent
extras:3. Biblioteca de Suporte
ShareCompat
:fonte
%
símbolo no buffer, alguns caracteres no email resultante não serão codificados corretamente. Você precisa executar aUri.encode
dança sugerida por @minipif.Isso é citado no documento oficial do Android, eu testei no Android 4.4 e funciona perfeitamente. Veja mais exemplos em https://developer.android.com/guide/components/intents-common.html#Email
fonte
EXTRA_EMAIL
não está funcionando para mim, então eu useiUri.parse("mailto: " + myEmail)
Uma resposta tardia, embora eu tenha descoberto uma solução que poderia ajudar outras pessoas:
Versão Java
Versão Kotlin
Esta foi a minha saída (apenas o Gmail + a Caixa de entrada sugerida):
Eu obtive essa solução no site Android Developers .
fonte
mailto
e o e-mail:mailto:[email protected]
Isso funciona para mim:
ou seja, use a
ACTION_SENDTO
ação em vez daACTION_SEND
ação. Eu tentei em alguns dispositivos Android 4.4 e limita o pop-up do seletor a exibir apenas aplicativos de e-mail (E-mail, Gmail, Yahoo Mail etc.) e ele insere corretamente o endereço de e-mail e o assunto no e-mail.fonte
Tentar:
fonte
message/rfc822
. Isso não é o mesmo que enviar um email. Use omailto:
protocolo, pois é isso que os clientes de email realmente entendem.Essa é a maneira correta de enviar a intenção de e-mail de acordo com a documentação oficial do desenvolvedor do Android
Adicione estas linhas de código ao seu aplicativo:
Opcional: adicione o corpo e o assunto, assim
Você já adicionou esta linha, mas é bom ter para novos usuários
Esse será o endereço do destinatário, o que significa que o usuário enviará a você (o desenvolvedor) um email.
fonte
Finalmente, venha com a melhor maneira de fazer
fonte
Se você deseja apenas os clientes de email, use
android.content.Intent.EXTRA_EMAIL
com uma matriz. Aqui está um exemplo:fonte
ACTION_SENDTO
O código a seguir funciona bem para mim.
fonte
Dos documentos dos desenvolvedores do Android :
fonte
Editar: não está mais funcionando com novas versões do Gmail
Esta foi a única maneira que encontrei na época para fazê-lo funcionar com qualquer personagem.
A resposta da doreamon é o caminho certo a seguir, pois funciona com todos os caracteres em novas versões do Gmail.
Resposta antiga:
Aqui é minha. Parece funcionar em todas as versões do Android, com suporte para o corpo do sujeito e da mensagem e suporte completo para caracteres utf-8:
fonte
Uri.encode
é o caminho correto a seguir. Mas por que chamá-lo duas vezes para sujeito e corpo?Nenhuma dessas soluções estava funcionando para mim. Aqui está uma solução mínima que funciona no Lollipop. No meu dispositivo, apenas o Gmail e os aplicativos de email nativos aparecem na lista de seletores resultante.
fonte
Funciona em todas as versões do android:
fonte
O código a seguir funcionou para mim !!
fonte
Isso funciona perfeitamente para mim:
fonte
Se você deseja garantir que sua intenção seja tratada apenas por um aplicativo de email (e não por outros aplicativos de mensagens de texto ou sociais), use a
ACTION_SENDTO
ação e inclua o esquema de dados "mailto:". Por exemplo:Encontrei isso em https://developer.android.com/guide/components/intents-common.html#Email
fonte
em Kotlin se alguém está olhando
fonte
A maioria dessas respostas funciona apenas para um caso simples quando você não está enviando anexos . No meu caso, às vezes preciso enviar anexo (ACTION_SEND) ou dois anexos (ACTION_SEND_MULTIPLE).
Então, peguei as melhores abordagens desse segmento e as combinei. Ele está usando as bibliotecas de suporte,
ShareCompat.IntentBuilder
mas mostro apenas aplicativos que correspondem ao ACTION_SENDTO com "mailto:" uri. Dessa forma, recebo apenas a lista de aplicativos de email com suporte a anexos:fonte
O uso
intent.setType("message/rfc822");
funciona, mas mostra aplicativos extras que não necessariamente lidam com e-mails (por exemplo, GDrive). UsarIntent.ACTION_SENDTO
comsetType("text/plain")
é o melhor, mas é necessário adicionarsetData(Uri.parse("mailto:"))
para obter os melhores resultados (apenas aplicativos de email). O código completo é o seguinte:fonte
Se você deseja segmentar o Gmail, faça o seguinte. Observe que a intenção é "ACTION_SENDTO" e não "ACTION_SEND" e os campos de intenção extra não são necessários para o Gmail.
fonte
Estou atualizando a resposta de Adil em Kotlin,
fonte
Por favor, use o código abaixo:
fonte
Talvez você deva tentar o seguinte:
intent.setType("plain/text");
Encontrei aqui . Eu usei no meu aplicativo e mostra apenas as opções de email e Gmail.
fonte
plain/text
, e esse nem é um tipo MIME válido. Isso não é o mesmo que enviar um email. Use omailto:
protocolo, pois é isso que os clientes de email realmente entendem.Componha um email no cliente de email do telefone:
fonte
Usa isto:
use build gradle:
fonte
É isso que eu uso e funciona para mim:
Isso também permitirá que o usuário escolha seu aplicativo de email preferido. A única coisa que isso não permite é definir o endereço de email do destinatário.
fonte
"
na segunda linha.fonte
fonte