即使安装了两个电子邮件客户端,使用 Intent.ACTION_SENDTO 也会产生错误“没有应用程序可以执行此操作”

her*_*imx 4 android

我正在尝试在 Android Studio 3.01 中使用电子邮件意图。如果我使用,即使同时安装了原生 Android 电子邮件客户端和 Gmail 电子邮件应用程序,ACTION_SENDTO我也会收到错误消息。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();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

感谢答案,最终的工作代码如下所示:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

}

Com*_*are 7

首先,ACTION_SENDTO不采用 MIME 类型。所以,摆脱setType(). 这解决了两个问题:

  1. 您人为地限制了声称支持该 MIME 类型的应用程序

  2. setType()消除你的setData()呼叫(setType(type)与相同setDataAndType(null, type)

其次,如果您的目标是直接启动电子邮件客户端,请摆脱createChooser().