Intent.EXTRA_EMAIL nie wypełnia pola Do.


89

Próbuję użyć wysłać wiadomość e-mail z mojej aplikacji, ale pole Do w wiadomości e-mail nie zostanie wypełnione. Jeśli dodam kod, aby wypełnić temat lub tekst, działają dobrze. Tylko pole Do nie zostanie wypełnione.

Próbowałem również zmienić typ na „tekst / zwykły” i „tekst / html”, ale pojawia się ten sam problem. Czy ktoś może mi pomóc?

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

Klient poczty e-mail, którego próbuję użyć, to Gmail

Odpowiedzi:


218

Myślę, że nie przechodzisz recipientjakoarray of string

powinno być jak

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

21
Android ... dlaczego jesteś taki żałosny?
Błędy wydarzyły się

4
hahaha, rozśmieszyłeś mnie +1 milion @BugsHappen .. Powody: to open source, ale dokumentacja nie jest w 100% satysfakcjonująca, producenci urządzeń modyfikują swoje potrzeby (większość urządzeń jest tania i bezużyteczna), programiści nie czytają „programista”. android.com ”.
MKJParekh

4
Upewnij się również, że NIE robisz intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) tego NIE DZIAŁA, ponieważ list.toArray () produkuje Object [], a nie String []
nikib3ro

@ kape123 to jednak działaintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Abtin Gramian

4

Użyj tego

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...")); 

``}

To zadziała :)
Tak mówi dokumentacja Androida o Intent.Extra_Email
- Tablica ciągów wszystkich adresów e-mail odbiorców „Do”.
Więc powinieneś poprawnie podawać ciąg znaków. Możesz przeczytać więcej tutaj
http://developer.android.com/guide/components/intents-common.html#Email i tutaj http://developer.android.com/guide/topics/resources /string-resource.html Lub użyj akcji ACTION_SENDTO i dołącz schemat danych „mailto:”. Na przykład:

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

3

W 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()
        }
    }

Możesz także użyć [ val emailIntent = Intent(Intent.ACTION_SENDTO)], aby wywołać klienta poczty elektronicznej

//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)

Mam nadzieję, że ten fragment kodu pomoże programistom Kotlin.


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

Mówi się, że żadna aplikacja nie może wykonać tej czynności.
Abu Nayem

1

Kilka rzeczy:

1 - Musisz ustawić stałą akcji jako ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Jeśli chcesz, aby był otwierany tylko przez pocztę, użyj metody setData (): intentEmail.setData(Uri.parse("mailto:"));W przeciwnym razie poprosi Cię o otwarcie go jako tekstu, obrazu, pliku audio przez inne aplikacje obecne na twoim urządzeniu.

3 - Musisz przekazać ciąg identyfikujący e-mail jako obiekt tablicy, a nie tylko jako ciąg. Ciąg to: „nazwa@email.com” . Array Obiekt ciągu to: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.