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

Я работал над программой Android для отправки электронной почты с вложением (файл изображения, аудиофайл и т. Д.) С использованием Intent с ACTION_SEND . Программа работает, когда электронная почта имеет одно вложение. Я использовал Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) для прикрепления указанного файла изображения к почте, и он работает нормально, почта может быть доставлена ​​через Gmail. Однако, когда я пытался иметь несколько изображений, прикрепленных к одной и той же почте, Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) вызывая Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri) , он не работал. Ни одно из прикреплений не отображается в письме.

Я искал документацию SDK и группу пользователей Android о вложении электронной почты, но не могу найти никакой связанной информации. Тем не менее, я обнаружил, что существует еще одна постоянная цель ACTION_SEND_MULTIPLE (доступная с уровня API 4), которая может соответствовать моим требованиям. Основываясь на документации SDK, он просто заявляет, что он передает несколько данных кому-то другому, он работает как ACTION_SEND , за исключением того, что данные несколько. Но я все еще не мог понять правильное использование этой команды. Я попытался объявить намерение с помощью ACTION_SEND_MULTIPLE , а затем несколько раз вызовет putExtra(EXTRA_STREAM, uri) чтобы прикрепить несколько изображений, но я получил тот же ошибочный результат, как и раньше, ни одно из вложений не появилось в письме.

Кто-нибудь пытался с ACTION_SEND_MULTIPLE и получил ли он работу с несколькими вложениями электронной почты?

Solutions Collecting From Web of "Android с несколькими приложениями электронной почты с использованием Intent"

Вот код, необходимый для создания emailIntent, который содержит несколько вложений.

 public static void email(Context context, String emailTo, String emailCC, String subject, String emailText, List<String> filePaths) { //need to "send multiple" to get more than one attachment final Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{emailTo}); emailIntent.putExtra(android.content.Intent.EXTRA_CC, new String[]{emailCC}); emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject); emailIntent.putExtra(Intent.EXTRA_TEXT, emailText); //has to be an ArrayList ArrayList<Uri> uris = new ArrayList<Uri>(); //convert from paths to Android friendly Parcelable Uri's for (String file : filePaths) { File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); context.startActivity(Intent.createChooser(emailIntent, "Send mail...")); } 

ACTION_SEND_MULTIPLE должно быть действием

А затем emailIntent.setType("text/plain");

с последующим:

 ArrayList<Uri> uris = new ArrayList<Uri>(); String[] filePaths = new String[] {"sdcard/sample.png", "sdcard/sample.png"}; for (String file : filePaths) { File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); startActivity(emailIntent); 

Это работает для меня.

Здесь я нашел отличный пример http://www.blackmoonit.com/2010/02/filebrowser-send-receive-intents/

Вы должны использовать

 final Intent aIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); aIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,theUris); aIntent.setType(theOverallMIMEtype); 

Хотя это старый поток, но, как показано выше, в поисках Google, я хочу добавить небольшой намек, чтобы завершить его, поэтому я напал на него.

Необходимо сделать прикрепленные файлы доступными для активности почты, иначе они не будут прикреплены. Поэтому вам нужно позвонить куда-нибудь

 fileIn.setReadable(true, false) 

Для нескольких вложений используйте PutParcelableArrayListExtra(Intent.ExtraStream, uris) где переменная uris – это List<IParcelable>(). Вот пример:

 var email = new Intent(Intent.ActionSendMultiple); email.SetType("text/plain"); email.PutExtra(Intent.ExtraEmail, new string[]{emailTo}); email.PutExtra(Intent.ExtraCc, new string[]{emailCC}); var uris = new List<IParcelable>(); filePaths.ForEach(file=> { var fileIn = new File(file); var uri = Android.Net.Uri.FromFile(fileIn); uris.Add(uri); }); email.PutParcelableArrayListExtra(Intent.ExtraStream, uris); context.StartActivity(Intent.CreateChooser(email, "Send mail...")); 

Надеюсь это поможет 😉