所以我正在尝试使用数据启动预先填充的电子邮件客户端。内容填充得很好,但我的问题是,在启动意图时,我希望它只显示要从中选择的电子邮件客户端。 相反,它显示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();
}
}
答案 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,它打开了他们的邮件客户端并提示用户设置电子邮件。 不提供应用程序的选择,但它的工作原理