我在操作视图中发送一封电子邮件,它在gmail中运行得很好,但如果用户选择任何其他邮件服务,它会用'+'替换空格
like in body text is "check out it is a good day"
it displays as "check+out+it+is+a+good+day"
任何想法如何解决这个问题
这是我发送电子邮件的功能
private void sendToAFriend() {
String subject = "it is a good day ";
String body = "Check out it is a good day";
String uriText =
"mailto:" +
"?subject=" + URLEncoder.encode(subject) +
"&body=" + URLEncoder.encode(body);
Uri uri = Uri.parse(uriText);
Intent sendIntent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(uri);
startActivity(Intent.createChooser(sendIntent, "Send email"));
}
试试这个代码。
Intent intent = new Intent(Intent.ACTION_SENDTO); // it's not ACTION_SEND
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
intent.setData(Uri.parse("mailto:default@recipient.com")); // or just "mailto:" for blank
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this will make such that when user returns to your app, your app is displayed, instead of the email app.
startActivity(intent);
根据URLEncoder.encode 方法的描述
java.net.URLEncoder.encode(字符串s)已弃用。请改用encode(String,String)。使用指定的编码方案enc将给定字符串s编码为x-www-form-urlencoded字符串。
除字母('a'..'z','a'..'z')和数字('0'..'9')以及字符'.','-','*','_'外的所有字符被转换为以"%"开头的十六进制值。例如:"#"->%23此外,空格由'+'
使用Uri.encode(String)而不是URLEncoder,它可以正确处理此用例中的空格。如果您希望将发送选项仅限于电子邮件,则更可取的是使用mailto链接的ACTION_VIEW。
只需使用,无需任何编码。
"&body="+body;
它对我有用!