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

时间:2015-05-21 13:17:07

标签: android email android-intent

所以我正在尝试使用数据启动预先填充的电子邮件客户端。内容填充得很好,但我的问题是,在启动意图时,我希望它只显示要从中选择的电子邮件客户端。 相反,它显示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();
    }
}

3 个答案:

答案 0 :(得分:1)

当你改变下面的intent.setType时,你会得到

intent.setType("text/plain");

使用

  

android.content.Intent.ACTION_SENDTO

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

我不建议您直接访问电子邮件应用。让用户选择他最喜欢的电子邮件应用。不要限制他。

如果您使用ACTION_SENDTO,则putExtra无法将主题和文字添加到意图中。使用Uri添加主题和正文。

我们可以使用message/rfc822代替"text/plain"作为MIME类型。但是,这并不表示“只提供电子邮件客户端” - 它表示“提供支持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);

它的工作......

答案 1 :(得分:0)

尝试这样对我来说工作正常......

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);

注意:只有拥有电子邮件地址才能使用。

有关详细信息,请参阅此链接Android - Is there a foolproof way to only show possible EMAIL clients?

答案 2 :(得分:0)

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

我跟着google docs做了这件事,说这样做:

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,它打开了他们的邮件客户端并提示用户设置电子邮件。 不提供应用程序的选择,但它的工作原理