Intent.EXTRA_EMAIL не заповнює поле Кому


89

Я намагаюся використовувати надіслати електронний лист із моєї програми, але поле електронної пошти Кому не заповниться. Якщо я додаю код для заповнення теми чи тексту, вони працюють нормально. Просто поле Кому не заповниться.

Я також намагався змінити тип на "text / plain" і "text / html", але у мене виникає та сама проблема. Хто-небудь може допомогти, будь ласка?

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

Клієнт електронної пошти, яким я намагаюся користуватися, - це Gmail

Відповіді:


218

Я думаю, ви не проходите recipientякarray of string

це повинно бути як

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

21
Android ... чому ти такий жалюгідний?
Помилки трапляються

4
ха-ха-ха, ти насмішив мене +1 мільйоном @BugsHappen .. Причини: Це відкритий код, але документація не на 100% задовільна, виробники пристроїв змінюють свої потреби (більшість пристроїв дешеві та марні), розробники не читають "розробник". android.com ".
MKJParekh

4
Також переконайтеся, що ви НЕ робите intent.putExtra(Intent.EXTRA_EMAIL, list.toArray()) це НЕ РОБОТИТИ, оскільки list.toArray () видає Object [], а не String []
nikib3ro

@ kape123, однак, це працюєintent.putExtra(Intent.EXTRA_EMAIL, list.toArray(new String[0]))
Абтін Граміан,

4

Використовуй це

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

``}

Це спрацює :)
Ось що в документації для Android сказано про Intent.Extra_Email
- масив рядків усіх адрес електронної пошти одержувачів "До".
Отже, ви повинні правильно подавати рядок. Ви можете прочитати більше тут
http://developer.android.com/guide/components/intents-common.html#Email та тут http://developer.android.com/guide/topics/resources /string-resource.html Або скористайтеся дією ACTION_SENDTO і включіть схему даних "mailto:". Наприклад:

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

У Котліні - 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()
        }
    }

Також ви можете використовувати [ val emailIntent = Intent(Intent.ACTION_SENDTO)] для виклику прямого поштового клієнта

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

Сподіваюся, цей фрагмент коду допоможе розробникам 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:"));
}

Це означає, що жодна програма не може виконати цю дію.
Абу Наєм

1

Кілька речей:

1 - Вам потрібно встановити змінну константи дії як ACTION_SENDTO.
Intent intentEmail = new Intent(Intent.ACTION_SENDTO);

2 - Якщо ви хочете, щоб його відкривала лише пошта, скористайтеся методом setData (): intentEmail.setData(Uri.parse("mailto:"));В іншому випадку він попросить вас відкрити його як текст, зображення, аудіофайл іншими програмами, присутніми на вашому пристрої.

3 - Вам потрібно передати рядок ідентифікатора електронної пошти як об’єкт масиву, а не просто як рядок. Рядок: "name@email.com" . Об'єкт масиву рядка: new String [] {"email1", "email2", "more_email"} .

intentEmail.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@overflow.com", "abcd@stack.com"});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.