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

46scxncf  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(217)

我尝试在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();
    }
}

}

6jygbczu

6jygbczu1#

首先,ACTION_SENDTO不接受MIME类型。因此,删除setType()。这解决了两个问题:
1.你人为地限制了那些声称支持该MIME类型的应用程序

  1. setType()删除您的setData()调用(setType(type)setDataAndType(null, type)相同)
    其次,如果你的目标是直接启动电子邮件客户端,那么就不要使用createChooser()

相关问题