Android Studio mailto Intent doesn't show subject and mail body

前端 未结 5 1728
無奈伤痛
無奈伤痛 2020-12-11 02:45

I\'m trying to send an e-mail from my Android App. With the click on a button, gmail should open and show a new email with my previously defined recipient, subject and email

5条回答
  •  有刺的猬
    2020-12-11 03:30

    Our old code for emails stopped working some days ago.

    It was the following:

    public static void shareTextToEmail(Context context, String[] email, String subject, String text)
        Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + TextUtils.join(",", email)));
        emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT, text);
        try {
            context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));
        } catch (android.content.ActivityNotFoundException e) {
            Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();
        }
    }
    

    I've adopted it according to the Zak.Antonio answer:

    public static void shareTextToEmail(Context context, String[] email, String subject, String text)
        Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
        selectorIntent.setData(Uri.parse("mailto:"));
    
        final Intent emailIntent = new Intent(Intent.ACTION_SEND);
        emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
        emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        emailIntent.putExtra(Intent.EXTRA_TEXT, text);
        emailIntent.setSelector(selectorIntent);
    
        try {
            context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));
        } catch (android.content.ActivityNotFoundException e) {
            Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();
        }
    }
    

    The key points are:

    • Replace Intent.ACTION_SENDTO with Intent.ACTION_SEND in emailIntent
    • Move Intent.ACTION_SENDTO to a selectorIntent
    • Do not put emails in intent data, put them only in extras at Intent.EXTRA_EMAIL

提交回复
热议问题