Отправка электронной почты с вложениями программно на Android

Я хочу реализовать кнопку, которая при нажатии открывает клиент электронной почты по умолчанию с файлом вложения.

Я следую этому, но получаю сообщение об ошибке в startActivity, заявляя, что он ожидает параметра активности, пока я его намерен. Я использую API 21 и Android Studio 1.1.0, поэтому, возможно, это что-то связано с комментарием в ответе, указанном в ссылке?

Это мой четвертый день, когда разработчик Android так жаль, что мне не хватает чего-то действительно элементарного.

Вот мой код:

    public void sendFileToEmail(File f){

    String subject = "Lap times";
    ArrayList<Uri> attachments = new ArrayList<Uri>();
    attachments.add(Uri.fromFile(f));
    Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments);
    intent.setClassName("com.android.email", "com.android.mail.compose.ComposeActivity");

    try {
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
    }

Ответ 1

Я думаю, ваша проблема в том, что вы не используете правильный путь к файлу.

Для меня работает следующее:

Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
emailIntent.putExtra(Intent.EXTRA_TEXT, "body text");
File root = Environment.getExternalStorageDirectory();
String pathToMyAttachedFile = "temp/attachement.xml";
File file = new File(root, pathToMyAttachedFile);
if (!file.exists() || !file.canRead()) {
return;
}
Uri uri = Uri.fromFile(file);
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));

Вам также необходимо предоставить разрешение пользователя через файл манифеста, как показано ниже

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Ответ 2

Попробуйте использовать this.It работает...

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    emailIntent.setType("*/*");

                    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(listVideos.get(position).getVideoPath())));//path of video 
                    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Спасибо