Android 使用Intent.ACTION_SENDTO生成错误';没有应用程序可以执行此操作;即使安装了两个电子邮件客户端

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)

我正在尝试使用Android Studio 3.01中的电子邮件意图。如果我使用
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()
    行?这不会完成当前活动吗?