Android 意图不只显示电子邮件客户端

Android intent not showing only email clients

所以我正在尝试使用数据启动一个预填充的电子邮件客户端。内容填充得很好,但我的问题是,在启动意图时,我希望它只显示来自 select 的电子邮件客户端。 相反,它显示 Gmail、添加到 EverNote、Android Beam、蓝牙和其他一些。

我不知道是不是棒棒糖的问题破坏了这个功能,因为我的一位经理几年前给我发来了对他来说工作正常的代码。

我的代码是:

private void openEmailClient(){
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("message/rfc822");

    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{getResources().getString(R.string.contact_feedback_email_address)});
    intent.putExtra(Intent.EXTRA_SUBJECT, getResources().getString(R.string.contact_feedback_email_subject_android));

    try{
        startActivity(Intent.createChooser(intent,intentEmailString));
    } catch(android.content.ActivityNotFoundException ex){
        Log.e(EMAIL_FAIL_TAG, EMAIL_FAIL);
        ex.printStackTrace();
    }
}

像这样尝试对我来说效果很好...

Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:abc@gmail.com"));    
intent.putExtra(Intent.EXTRA_SUBJECT, "Test App");  
intent.putExtra(Intent.EXTRA_TEXT, "Email Body");
startActivity(intent);

注意:仅当您有电子邮件地址时才有效。

有关更多信息,请参阅此 link Android - Is there a foolproof way to only show possible EMAIL clients?

当您像下面那样更改您的 intent.setType 时,您将获得

intent.setType("text/plain");

使用

android.content.Intent.ACTION_SENDTO

(new Intent(Intent.ACTION_SENDTO);) 仅获取电子邮件客户端列表,没有 facebook 或其他应用程序。只是电子邮件客户端。

我不建议您直接进入电子邮件应用程序。让用户选择他最喜欢的电子邮件应用程序。不要束缚他。

如果您使用 ACTION_SENDTOputExtra 无法将主题和文本添加到意图。使用 Uri 添加主题和正文。

我们可以使用 message/rfc822 而不是 "text/plain" 作为 MIME 类型。但是,这并不表示 "only offer email clients"——它表示“提供任何支持 message/rfc822 data" 的东西。这很容易包括一些非电子邮件客户端的应用程序。

message/rfc822 支持 .mhtml、.mht、.mime 的 MIME 类型

编辑

 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:someone@example.com"));
 intent.putExtra("subject", "my subject");
 intent.putExtra("body", "my message");
 startActivity(intent);

它的工作...

所以我解决了。不太理想,但它比我尝试过的任何其他方法都好。

我按照 google 文档进行操作,其中说明要这样做:

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // only email apps should handle this
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

现在可以使用了。 这只是找到一个用于处理邮件的默认应用程序。我不确定它是如何决定的,但就我而言,它打开了 GMail。在没有安装 GMail 的设备上,例如 Galaxy S5,它会打开他们的邮件客户端并提示用户设置电子邮件。 不提供应用程序选择,但它有效