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 и получил ли он работу с несколькими вложениями электронной почты?

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

     public static void email(Context context, String emailTo, String emailCC, String subject, String emailText, List 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 uris = new ArrayList(); //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 uris = new ArrayList(); 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); 

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

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

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

     fileIn.setReadable(true, false) 

    Здесь я нашел отличный пример 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); 

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

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

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

    Давайте будем гением компьютера.