2016-06-26 2 views
1

я следующее:Отправить несколько вложений электронной почты И предварительного заполнения

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
intent.setType("text/plain"); 
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { receiver }); 
intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); // uris is a array list! 

Затем я попытался добавить следующее:

intent.putExtra(Intent.EXTRA_TEXT, "text"); 

это добавляет лаглинь жалуется, что текст не является список массива. Работает, хотя, но электронная почта не имеет тела

И в качестве альтернативы я попробовал следующее:

ArrayList<String> texts = new ArrayList(); 
for (int i = 0; i < uris.size(); i++) 
    texts.add("Test"); 
intent.putParcelableArrayListExtra(Intent.EXTRA_TEXT, texts); 

Это снимает предупреждение журнала, но электронная почта по-прежнему не имеет тела.

Вопрос

Как можно добавить несколько файлов на почту и предварительного заполнения тела с текстом?

ответ

1

Как добавить несколько файлов в почту и заполнить текст каким-либо текстом?

Вообще-то, вы этого не делаете.

Цитирование the documentation for ACTION_SEND_MULTIPLE:

получить * ArrayListExtra может иметь либо поле EXTRA_TEXT или EXTRA_STREAM, содержащий данные, которые будут отправлены

(курсив добавлен)

You пытаются включить оба, что выходит за пределы спецификации Intent.

Существует множество приложений, которые могут выбрать для вашего ACTION_SEND_MULTIPLEIntent. Что каждый из этих приложений делает с вашим Intent, зависит от разработчиков этих приложений. Вероятные кандидаты:

  • Игнорировать EXTRA_TEXT, как вы видите
  • Игнорировать EXTRA_STREAM
  • честь и
  • Краш ужасно

То же самое относится и к ACTION_SEND (вы можете иметь либо EXTRA_TEXT или EXTRA_STREAM, не оба).

+0

Похоже, вы правы, это не поддерживается ... Тем не менее, это не означает, что она никогда ничего не сработает, как вы сказали. Я был бы доволен решением, которое работает с gmail/inbox по крайней мере ... Хотя моя попытка выше, похоже, работает на других, она не работает для меня с inbox ... – prom85

1

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

Intent i = new Intent(Intent.ACTION_SEND_MULTIPLE); i.setType("image/png"); i.putExtra(Intent.EXTRA_SUBJECT, "EMAIL SUBJECT"); i.putExtra(Intent.EXTRA_TEXT, "Email Body content....");

Здесь я жесткое кодирование 2 изображения для ArrayList, который мне нужно отправить по электронной почте пристального Chooser:

Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), R.drawable.slide_1); String path = MediaStore.Images.Media.insertImage(getContentResolver(), largeIcon, "title", null); Bitmap largeIcon1 = BitmapFactory.decodeResource(getResources(), R.drawable.slide_2); String path1 = MediaStore.Images.Media.insertImage(getContentResolver(), largeIcon1, "title", null); ArrayList<Uri> screenshotUri = new ArrayList<>(); screenshotUri.add(Uri.parse(path)); screenshotUri.add(Uri.parse(path1));

Теперь ArrayList<Uri> добавлен в умысел метода.

i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(i, "Send mail"));

Надеется, что это поможет ...

+0

Я добавляю несколько текстовых файлов и делаю точно так же, насколько я вижу. Добавление 'Uri' как' ArrayList' и установка текста. Вместо того, чтобы помещать мои файлы в медиа-магазин, у меня есть свой собственный ContentProvider и обмениваться файлами из каталога кеша приложений ... К сожалению, этот подход не работает с моим приложением для входящих сообщений ... В каком приложении электронной почты вы пытались это сделать с помощью ? – prom85

+0

@ prom85 Я использовал этот код для приложения Gmail. –

Смежные вопросы