电子邮件意图忽略预设文本中的换行符(Android)

caw*_*caw 7 email android android-intent

在各种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"));
Run Code Online (Sandbox Code Playgroud)

在for循环中,对象的字符串输出与临时字符串"contentStr"连接在一起.在每个对象之后,应该有一个换行符("\n").

因此,当我在手机上测试此代码时,它工作正常,每个对象都有自己的行.

但是用户报告说他们的电子邮件应用程序(也是Android标准)将所有内容放在一行中并忽略了换行符.

我做错了什么?或者我可以忽略这个错误报告,因为它不是开发人员可以解决的问题吗?

njz*_*zk2 7

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);
Run Code Online (Sandbox Code Playgroud)

这不会在意图中放入任何内容, contentStr 为空,并且 content 仅包含最后一个对象。

这是一种更好、更短、更有效的方法:

contentStr = TextUtils.join("\n", mArrayList);
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢您使用 `TextUtils.join()` 替代。我使用 '\n' 是因为这是针对 Linux(和其他),而 `\r\n` 是针对 Windows(和其他),不是吗?维基百科建议在 Java 中使用 `System.getProperty("line.separator")` 作为换行符。这是一个很好的解决方案吗? (3认同)

jus*_*ilt 7

你需要替换\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/>"););
Run Code Online (Sandbox Code Playgroud)