Намерение электронной почты игнорировать разрывы строк в заданном тексте (Android) - PullRequest
6 голосов
/ 15 марта 2012

В различных приложениях Android я использую следующий код, чтобы показать средство выбора приложений для электронной почты, и после того, как пользователь выбрал одно из приложений, вставляю предопределенный текст в форму электронной почты:

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "info@example.org" });
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Sample subject");
String contentStr = "";
for (Object o : mArrayList) { // mArrayList: ArrayList<Object>
    content = contentStr+o.toString()+"\n";
}
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr);
startActivity(Intent.createChooser(emailIntent, "Choose application"));

В цикле for вывод строки объектов соединяется с временной строкой "contentStr". После каждого объекта должен быть разрыв строки ("\ n").

Поэтому, когда я тестирую этот код на своем телефоне, он работает нормально, и у каждого объекта есть своя строка.

Но пользователи сообщают, что их почтовое приложение (в том числе стандарт Android) помещает все в одну строку и игнорирует разрывы строк.

Так я что-то не так делаю? Или я могу просто проигнорировать этот отчет об ошибке, так как это не проблема, которую может решить разработчик?

Ответы [ 4 ]

3 голосов
/ 19 марта 2012

2 потенциальных отведения:

  • Попробуйте использовать \ r или \ n \ r вместо простого \ n, или даже 2 разрывов строки.
  • Используйте форматированные HTML разрывы строк (<br>)

Также здесь есть что-то не так с вашим кодом

String contentStr = "";
for (Object o : mArrayList) { // mArrayList: ArrayList<Object>
    content = contentStr+o.toString()+"\n";
}
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr);

Это ничего не значит в намерении, contentStr пусто, а контент содержит толькопоследний объект.

Это лучший, более короткий и эффективный метод:

contentStr = TextUtils.join("\n", mArrayList);
1 голос
/ 14 ноября 2017

Вам нужно заменить \n на <br/>, даже если вы поставите EXTRA_TEXT.Вот мой код:

final Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, "xxx@xxx.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_TEXT, "This\nis\na\ntest!".replace("\n", "<br/>"););
0 голосов
/ 15 марта 2012

Я использую что-то вроде следующего, чтобы быть уверенным, что приложения SMS / Twitter / Facebook там не будут:

Intent emailIntent = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:someemail@gmail.com"));
                emailIntent.setType("text/plain");
                emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"someemail@gmail.com"});
                emailIntent.putExtra(Intent.EXTRA_TEXT, msg );
                emailIntent.putExtra(Intent.EXTRA_SUBJECT, "This is my Error Report");

И здесь String msg был создан с использованием StringBuilder и содержит \ n для переносов строк. По сути, я думаю, что вам просто нужно изменить тип MIME, и вы будете настроены.

0 голосов
/ 15 марта 2012

использование:

emailIntent.setType("text/plain");

ACTION_SEND

final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] { "info@example.org" });
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Sample subject");
String contentStr = "";
for (Object o : mArrayList) { // mArrayList: ArrayList<Object>
    content = contentStr+o.toString()+"\n";
}
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, backupStr);
startActivity(Intent.createChooser(emailIntent, "Choose application"));
...