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_SENDTO
,putExtra
无法将主题和文本添加到意图。使用 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,它会打开他们的邮件客户端并提示用户设置电子邮件。
不提供应用程序选择,但它有效
所以我正在尝试使用数据启动一个预填充的电子邮件客户端。内容填充得很好,但我的问题是,在启动意图时,我希望它只显示来自 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_SENDTO
,putExtra
无法将主题和文本添加到意图。使用 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,它会打开他们的邮件客户端并提示用户设置电子邮件。 不提供应用程序选择,但它有效