我尝试在Android Studio 3.01中使用电子邮件Intent。如果我使用ACTION_SENDTO
,即使安装了普通Android电子邮件客户端和Gmail电子邮件应用程序,我也会收到错误No apps can perform this action
。如果我使用ACTION_SEND
代替ACTION_SENDTO
,则会显示一个屏幕,显示设备上的每个应用程序。
我的目标是直接调用默认的电子邮件客户端,而不需要通过中间的屏幕。我做错了什么?
我使用的代码是:
public void sendEmail(View view) {
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.setType("text/plain");
try {
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
finish();
Log.i("Email sent!", "");
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MapsActivityCurrentPlace.this,
"Email not installed.", Toast.LENGTH_SHORT).show();
}
}
已编辑
感谢答案,最终的工作代码看起来像这样:
public void sendEmail(View view) {
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse("mailto:"));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
try {
startActivity(emailIntent);
finish();
Log.i("Email sent!", "");
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MapsActivityCurrentPlace.this,
"Email not installed.", Toast.LENGTH_SHORT).show();
}
}
}
1条答案
按热度按时间6jygbczu1#
首先,
ACTION_SENDTO
不接受MIME类型。因此,删除setType()
。这解决了两个问题:1.你人为地限制了那些声称支持该MIME类型的应用程序
setType()
删除您的setData()
调用(setType(type)
与setDataAndType(null, type)
相同)其次,如果你的目标是直接启动电子邮件客户端,那么就不要使用
createChooser()
。