Android 使用Intent.ACTION_SENDTO生成错误';没有应用程序可以执行此操作;即使安装了两个电子邮件客户端
我正在尝试使用Android Studio 3.01中的电子邮件意图。如果我使用Android 使用Intent.ACTION_SENDTO生成错误';没有应用程序可以执行此操作;即使安装了两个电子邮件客户端,android,Android,我正在尝试使用Android Studio 3.01中的电子邮件意图。如果我使用ACTION\u SENDTO,我会收到一个错误即使安装了股票Android电子邮件客户端和Gmail电子邮件应用程序,也没有应用程序可以执行此操作。如果我使用ACTION\u SEND代替ACTION\u SENDTO,将显示一个屏幕,显示设备上的每个应用程序 我的目标是直接调用默认的电子邮件客户机,而无需通过中间屏幕。我做错了什么 我使用的代码是: public void sendEmail(View view)
ACTION\u SENDTO
,我会收到一个错误即使安装了股票Android电子邮件客户端和Gmail电子邮件应用程序,也没有应用程序可以执行此操作。如果我使用ACTION\u SEND
代替ACTION\u 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();
}
}
}首先,操作\u SENDTO
不采用MIME类型。所以,去掉setType()
。这解决了两个问题:
您人为地限制了声称支持该MIME类型的应用程序
setType()
清除您的setData()
调用(setType(type)
与setDataAndType(null,type)
相同)
第二,如果您的目标是直接启动电子邮件客户端,请摆脱createChooser()
谢谢您的帮助。如果我使用ACTION\u SENDTO
应用程序将崩溃。如果我删除createChooser
应用程序崩溃:(@hermitjimx:使用LogCat检查与崩溃相关的Java堆栈跟踪:。请记住,电子邮件客户端可能不喜欢没有实际电子邮件地址的mailto:
Uri
。它正常工作了。同意你关于空“mailto:”
-看起来像是一个骗局,但想不出任何其他方法让用户选择收件人。出于某种原因,我无法增加您的答案,但非常感谢您的帮助。为什么您有finish()
行?这不会完成当前活动吗?