Java Android Studio mailto Intent不';不显示主题和邮件正文
我正在尝试从我的Android应用程序发送电子邮件。点击一个按钮,gmail就会打开并显示一封新的邮件,上面有我之前定义的收件人、主题和邮件正文。到目前为止,我已经尝试将Intent.ACTION_视图和Intent.ACTION_发送到。两者都只向收件人显示我的草稿。主题和信息都在被处理。奇怪的是,当使用模拟器时,它工作得很好。还试图锁定android错误日志。好像我没有得到允许。这真的是许可问题还是其他问题? 我真的很感激任何帮助 干杯 这是我的密码:Java Android Studio mailto Intent不';不显示主题和邮件正文,java,android,email,android-intent,error-handling,Java,Android,Email,Android Intent,Error Handling,我正在尝试从我的Android应用程序发送电子邮件。点击一个按钮,gmail就会打开并显示一封新的邮件,上面有我之前定义的收件人、主题和邮件正文。到目前为止,我已经尝试将Intent.ACTION_视图和Intent.ACTION_发送到。两者都只向收件人显示我的草稿。主题和信息都在被处理。奇怪的是,当使用模拟器时,它工作得很好。还试图锁定android错误日志。好像我没有得到允许。这真的是许可问题还是其他问题? 我真的很感激任何帮助 干杯 这是我的密码: 通过操作视图发送电子邮件 通过A
- 通过操作视图发送电子邮件
- 通过ACTION_SENDTO发送电子邮件
- 来自logcat的错误消息
val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.setType("text/plain")
emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf("jon@example.com"))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject")
emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text")
val packageManager = packageManager
val activities = packageManager.queryIntentActivities(emailIntent, 0)
val isIntentSafe = activities.size > 0
if (isIntentSafe) {
startActivity(emailIntent);
}else{
Log.d("MainActivty","Email App not installed");
}
试试这个代码,它对我有用
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:")); // only email apps should handle this
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{email});
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject here");
intent.putExtra(Intent.EXTRA_TEXT,"Body Here");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
还可以在android清单中添加意图过滤器
<activity ...>
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="mailto" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
我想我们也有同样的问题。Android API 29在向其他应用程序发送数据方面引入了一些改进。请参阅此处的更多详细信息: 这是一个适合我的解决方案
Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
selectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"address@mail.com"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "The subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "The email body");
emailIntent.setSelector( selectorIntent );
activity.startActivity(Intent.createChooser(emailIntent, "Send email..."));
简单地说,这样你就需要安卓标准应用程序选择器,此外,你还指定要发送电子邮件。因此,电子邮件客户端只会出现。
如果用户只安装了一个电子邮件客户端,则意图将立即重定向到该客户端
希望这对您也有帮助。我们以前的电子邮件代码几天前就停止工作了 具体如下:
public static void shareTextToEmail(Context context, String[] email, String subject, String text)
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + TextUtils.join(",", email)));
emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
try {
context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));
} catch (android.content.ActivityNotFoundException e) {
Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();
}
}
我是根据扎克·安东尼奥的回答采纳的:
public static void shareTextToEmail(Context context, String[] email, String subject, String text)
Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
selectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
emailIntent.setSelector(selectorIntent);
try {
context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));
} catch (android.content.ActivityNotFoundException e) {
Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();
}
}
重点是:
- 将
emailIntent中的
替换为Intent.ACTION\u SENDTO
Intent.ACTION\u SEND
- 将
移动到Intent.ACTION\u send to
selectorcontent
- 不要将电子邮件放在意向数据中,只放在
intent.EXTRA\u EMAIL
- 为了让它在三星和Pixel设备上运行,我们必须在url和extras上添加参数
val email = "xxxx@xxxx.com"
val subject = "xxxx"
val body = "xxxx"
val selectorIntent = Intent(Intent.ACTION_SENDTO)
val urlString = "mailto:" + Uri.encode(email) + "?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body)
selectorIntent.data = Uri.parse(urlString)
val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
emailIntent.putExtra(Intent.EXTRA_TEXT, body)
emailIntent.selector = selectorIntent
startActivity(Intent.createChooser(emailIntent, "Send email"))
这个答案对我来说很有用,使用Uri进行解析
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:?subject=" + subject + "&to=" + to));
context.startActivity(emailIntent);
ACTION\u VIEW
和ACTION\u SENDTO
都不支持EXTRA\u SUBJECT
或EXTRA\u TEXT
。编辑到此集合类型(“文本/普通”)这是什么语言?我试着把它翻译成Java,但我不知道packageManager和activities是什么类型的变量这是Kotlin。packageManager是android.content.pm.packageManager类型的,请您添加一些关于答案的解释好吗?非常感谢,我甚至可以选择使用一个电子邮件客户端作为标准。必须将意图过滤器标记放在服务标记内,并将MainActivity作为名称。所以它看起来是这样的:
它仍然没有显示主体和主体!最后在Gmail突然停止工作之前,在过去10-11年中,我一直在使用Gmail的代码。这样做才是正确的选择。:)也为我工作。Intent.createChooser是可选的,emailIntent可以直接传递。它的工作非常出色,节省了我几分钟的时间。感谢lotIt,它可以工作,但它要求用户选择“Gmail”,并提供“复制”和“Paypal”选项,这只会导致奇怪或没有behavior@pete这是由于“ACTION_SEND”意图的广泛范围,我同意这对用户来说有点混乱。我还没有尝试过,但我相信你可以在extras中指定MIME数据类型,这将进一步过滤显示的应用列表。我也解决了这个问题,就像你的答案一样。其他答案不太好。这个例子对我仍然不起作用,直到我像其他答案一样将电子邮件“收件人”地址放入一个数组。(我在一个像素上测试,Android 10)。否则,这个示例也很好。@gjj示例中的变量email
是String[]
public static void shareTextToEmail(Context context, String[] email, String subject, String text)
Intent selectorIntent = new Intent(Intent.ACTION_SENDTO);
selectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, email);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, text);
emailIntent.setSelector(selectorIntent);
try {
context.startActivity(Intent.createChooser(emailIntent, context.getString(R.string.share_email_title)));
} catch (android.content.ActivityNotFoundException e) {
Toast.makeText(context, context.getString(R.string.share_no_intent_handler_found), Toast.LENGTH_SHORT).show();
}
}
val email = "xxxx@xxxx.com"
val subject = "xxxx"
val body = "xxxx"
val selectorIntent = Intent(Intent.ACTION_SENDTO)
val urlString = "mailto:" + Uri.encode(email) + "?subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body)
selectorIntent.data = Uri.parse(urlString)
val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
emailIntent.putExtra(Intent.EXTRA_TEXT, body)
emailIntent.selector = selectorIntent
startActivity(Intent.createChooser(emailIntent, "Send email"))
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:?subject=" + subject + "&to=" + to));
context.startActivity(emailIntent);