Intent.EXTRA_EMAIL não preenche o campo Para


87

Estou tentando usar um para enviar um e-mail do meu aplicativo, mas o campo Para do e-mail não será preenchido. Se eu adicionar código para preencher o assunto ou texto, eles funcionam bem. Apenas o campo Para não será preenchido.

Também tentei alterar o tipo para "text / plain" e "text / html", mas recebo o mesmo problema. Alguém pode ajudar por favor?

public void Email(){

    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    String recipient = getString(R.string.IntegralEmailAddress);
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL  , recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); }

O cliente de e-mail que estou tentando usar é o Gmail

Respostas:


213

Eu acho que você não está passando recipientporarray of string

deveria ser como

emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] { "someone@gmail.com" });

19
Android ... por que você é tão patético?
Bugs acontecem de

4
hahaha, você me fez rir +1 Million @BugsHappen .. Motivos: É um código aberto, mas a documentação não é 100% satisfatória, os fabricantes de dispositivos modificam de acordo com suas necessidades (a maioria dos dispositivos são baratos e inúteis), os desenvolvedores não lêem "desenvolvedor. android.com ".
MKJParekh de

4
Certifique-se também de que NÃO está fazendo intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) isso NÃO VAI FUNCIONAR, já que list.toArray () produz Object [] e não String []
nikib3ro

@ kape123, no entanto, isso funcionaintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Usa isto

public void Email(){
    // use this to declare your 'recipient' string and get your email recipient from your string xml file
    Resources res = getResources();
    String recipient = getString(R.string.IntegralEmailAddress);
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822");  //set the email recipient
    emailIntent.putExtra(Intent.EXTRA_EMAIL, recipient);
    //let the user choose what email client to use
    startActivity(Intent.createChooser(emailIntent, "Send mail using...")); 

``}

Isso funcionará :)
Isso é o que a documentação do Android diz sobre Intent.Extra_Email
-Uma matriz de string de todos os endereços de e-mail de destinatários "Para".
Portanto, você deve alimentar a string adequadamente. Você pode ler mais aqui
http://developer.android.com/guide/components/intents-common.html#Email e aqui http://developer.android.com/guide/topics/resources /string-resource.html Ou use a ação ACTION_SENDTO e inclua o esquema de dados "mailto:". Por exemplo:

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);
}

2
private void callSendMeMail() {
    Intent Email = new Intent(Intent.ACTION_SEND);
    Email.setType("text/email");
    Email.putExtra(Intent.EXTRA_EMAIL, new String[] { "me@gmail.com" });
    Email.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
    startActivity(Intent.createChooser(Email, "Send mail to Developer:"));
}

Ele está dizendo que nenhum aplicativo pode realizar essa ação.
Abu Nayem

2

Em Kotlin - Android

fun sendMail(
        activity: Activity,
        emailIds: Array<String>,
        subject: String,
        textMessage: String
    ) {


        val emailIntent = Intent(Intent.ACTION_SEND)
        emailIntent.type = "text/plain"
        emailIntent.putExtra(Intent.EXTRA_EMAIL, emailIds)
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
        emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage)
        emailIntent.setType("message/rfc822")
        try {
            activity.startActivity(
                Intent.createChooser(
                    emailIntent,
                    "Send email using..."
                )
            )
        } catch (ex: ActivityNotFoundException) {
            Toast.makeText(
                activity,
                "No email clients installed.",
                Toast.LENGTH_SHORT
            ).show()
        }
    }

Você também pode usar [ val emailIntent = Intent(Intent.ACTION_SENDTO)] para invocar o cliente de email direto

//argument of function
val subject = "subject of you email"
val eMailMessageTxt = "Add Message here"

val eMailId1 = "emailId1@gmail.com"
val eMailId2 = "emailId2@gmail.com"
val eMailIds: Array<String> = arrayOf(eMailId1,eMailId2)

//Calling function
sendMail(this, eMailIds, subject, eMailMessageTxt)

Espero que este trecho de código ajude os desenvolvedores do kotlin.


1

Algumas coisas:

1 - Você precisa definir a variável da constante de ação como ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Se você deseja que seja aberto apenas pelo e-mail, use o método setData (): intentEmail.setData(Uri.parse("mailto:"));Caso contrário, ele solicitará que você abra como texto, imagem ou arquivo de áudio por outros aplicativos presentes no seu dispositivo.

3 - Você precisa passar a string do ID do email como um objeto de matriz e não apenas como uma string. A string é: "name@email.com" . O objeto Array da string é: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.