Невозможно отправить электронное письмо с вложениями из моего приложения с помощью намерений (Gmail)

Я пытаюсь отправить файлы (файлы .log), содержащиеся в папке SDCard, с помощью Intent. Это код:

public void sendMail() {
            Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
            intent.putExtra(Intent.EXTRA_SUBJECT, "Log files");
            intent.putExtra(Intent.EXTRA_TEXT, "body");
            //has to be an ArrayList
            ArrayList<Uri> uris = new ArrayList<Uri>();
            //convert from paths to Android friendly Parcelable Uri's
            if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
                File root = Environment.getExternalStorageDirectory();

                File logfolder = new File(root, "log");


                for (String file : logfolder.list()){
                    Uri u = Uri.parse(file);
                    uris.add(u);
                }
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
                startActivity(Intent.createChooser(intent, new String("Send mail...")));
            }

        }

Я выбираю Gmail из меню. Когда Gmail открыт, он правильно отображает письмо с получателем, темой, текстом и прикрепленными файлами. Письмо отправлено без ошибок, но я получаю уведомление в строке состояния, в котором говорится: «Не удалось показать вложение»! Фактически получатель получает электронное письмо правильно, но к нему нет вложения. Я не могу понять, в чем проблема. Почему не отправляются вложения? Помогите, пожалуйста!!


person user1709805    schedule 13.03.2013    source источник
comment
stackoverflow.com/questions/9174423 /   -  person Hidden    schedule 13.03.2013


Ответы (1)


Ok. я нахожу решение. Необходимо заменить это:

for (String file : logfolder.list()){
   Uri u = Uri.parse(file);
   uris.add(u);
}

с этим:

for (File file : logfolder.listFiles()){
    Uri u = Uri.fromFile(file);
    uris.add(u);
}
person user1709805    schedule 13.03.2013
comment
переключение с Uri.parse() на Uri.fromFile() у меня тоже сработало! - person Hans-Christoph Steiner; 22.06.2013
comment
Работал у меня. Uri u = Uri.fromFile (файл); Спасибо :) - person Fawwad Shafi; 08.11.2013