我有一個問題..我只想要電子郵件活動解決意圖ACTION.SEND,但在電子郵件旁邊我也獲得其他應用程序(例如TubeMate),即使我已將MIME類型設置爲' message/rfc822'...任何想法如何才能讓電子郵件應用程序解決它..只有電子郵件應用程序來解決意圖
回答
在Android中,沒有電子郵件活動這樣的事情。 也沒有意向過濾器,可以創建只包含電子郵件應用程序。每個應用程序(或活動)都可以定義它自己的意圖過濾器。
所以當使用意圖ACTION_SEND時,你必須依靠用戶的智能從選擇器(而不是TubeMate)挑選喜歡的電子郵件應用程序。
同意的方法。事實上,我只是在博客上寫道:http://commonsware.com/blog/2011/06/28/share-where-the-user-wants.html – CommonsWare
String recepientEmail = ""; // either set to destination email or leave empty
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:" + recepientEmail));
startActivity(intent);
的點是使用ACTION_SENDTO
作爲動作和mailto:
爲數據。如果您想讓用戶指定目標電子郵件地址,請使用mailto:
;如果指定電子郵件發送給自己,用mailto:[email protected]
建議的方法篩選所有的應用程序,可以發送電子郵件(如默認的電子郵件應用程序或Gmail)
這是過濾電子郵件客戶端(或其他可以處理mailto協議的軟件),但有一個明顯的例外:ACTION_SENDTO不允許您發送任何附件。因此,直到你不處理附件時,它才能工作,但如果你這樣做,那麼選擇「message/rfc822」方法。 –
@MikeCamino在4.1附件中適用於我的gmail –
完美的解決方案。謝謝。 – dasar
ü也可以使用:
//writes messages only to email clients
public void setWriteEmailButton() {
btnWriteMail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(Intent.ACTION_SENDTO);
i.setData(Uri.parse("mailto:"));
i.putExtra(Intent.EXTRA_EMAIL , new String[]{mConsultantInfos.getConsultantEMail()});
i.putExtra(Intent.EXTRA_SUBJECT, mContext.getString(R.string.txtSubjectConsultantMail));
i.putExtra(Intent.EXTRA_TEXT , "");
try {
startActivity(Intent.createChooser(i, mContext.getString(R.string.txtWriteMailDialogTitle)));
} catch (android.content.ActivityNotFoundException ex) {
UI.showShortToastMessage(mContext, R.string.msgNoMailClientsInstalled);
}
}
});
}
有樂趣(兩者的組合))
這恰好適用於某些電子郵件應用程序,但它不適用於其他應用程序。在這些「其他」中有K-9(除非你有寫這個的最新版本,我相信)。我強烈建議不要使用這種混合方法。 –
你也可以使用它。這是更有效的
Intent mailIntent = new Intent(Intent.ACTION_SEND);
String mailTo[] = new String[] { "MAIL_TO_1", "MAIL_TO_2" };
mailIntent.putExtra(Intent.EXTRA_EMAIL, mailTo);
mailIntent.putExtra(Intent.EXTRA_SUBJECT, "Your subject");
mailIntent.putExtra(Intent.EXTRA_TEXT, "MailsBody");
mailIntent.setType("plain/text");
startActivity(Intent.createChooser(mailIntent, "only email client"));
此代碼示例顯示只有那些設備
這個答案在這個問題的上下文中顯然是錯誤的。這將在我的一臺設備上顯示十幾個應用程序供您選擇,其中兩個是電子郵件應用程序。另外,請詳細說明您的意思_更高效_。 –
MIME類型是「text/plain」而非「plain/text」 –
這裏對當前已安裝的電子郵件客戶端是我如何發送電子郵件帶有附件(證明各種MIME類型的附件的工作,即使是在相同的電子郵件),並且只允許使用電子郵件應用程序(對於沒有應用程序支持「mailto」的情況,它也有解決方案)。 起初,我們嘗試並獲得支持mailto:
格式的活動。如果沒有找到,我們將獲得支持message/rfc822
MIME類型的所有活動。 我們選擇默認應用程序(如果有默認應用程序)或允許用戶從可用應用程序中進行選擇。 如果沒有應用程序支持mailto:
和message/rfc822
,那麼我們使用默認選擇器。
public static void sendEmail(final Context p_context, final String p_subject, final String p_body, final ArrayList<String> p_attachments)
{
try
{
PackageManager pm = p_context.getPackageManager();
ResolveInfo selectedEmailActivity = null;
Intent emailDummyIntent = new Intent(Intent.ACTION_SENDTO);
emailDummyIntent.setData(Uri.parse("mailto:[email protected]"));
List<ResolveInfo> emailActivities = pm.queryIntentActivities(emailDummyIntent, 0);
if (null == emailActivities || emailActivities.size() == 0)
{
Intent emailDummyIntentRFC822 = new Intent(Intent.ACTION_SEND_MULTIPLE);
emailDummyIntentRFC822.setType("message/rfc822");
emailActivities = pm.queryIntentActivities(emailDummyIntentRFC822, 0);
}
if (null != emailActivities)
{
if (emailActivities.size() == 1)
{
selectedEmailActivity = emailActivities.get(0);
}
else
{
for (ResolveInfo currAvailableEmailActivity : emailActivities)
{
if (true == currAvailableEmailActivity.isDefault)
{
selectedEmailActivity = currAvailableEmailActivity;
}
}
}
if (null != selectedEmailActivity)
{
// Send email using the only/default email activity
sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, selectedEmailActivity);
}
else
{
final List<ResolveInfo> emailActivitiesForDialog = emailActivities;
String[] availableEmailAppsName = new String[emailActivitiesForDialog.size()];
for (int i = 0; i < emailActivitiesForDialog.size(); i++)
{
availableEmailAppsName[i] = emailActivitiesForDialog.get(i).activityInfo.applicationInfo.loadLabel(pm).toString();
}
AlertDialog.Builder builder = new AlertDialog.Builder(p_context);
builder.setTitle(R.string.select_mail_application_title);
builder.setItems(availableEmailAppsName, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, emailActivitiesForDialog.get(which));
}
});
builder.create().show();
}
}
else
{
sendEmailUsingSelectedEmailApp(p_context, p_subject, p_body, p_attachments, null);
}
}
catch (Exception ex)
{
Log.e(TAG, "Can't send email", ex);
}
}
protected static void sendEmailUsingSelectedEmailApp(Context p_context, String p_subject, String p_body, ArrayList<String> p_attachments, ResolveInfo p_selectedEmailApp)
{
try
{
Intent emailIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
String aEmailList[] = { "[email protected]"};
emailIntent.putExtra(Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, null != p_subject ? p_subject : "");
emailIntent.putExtra(Intent.EXTRA_TEXT, null != p_body ? p_body : "");
if (null != p_attachments && p_attachments.size() > 0)
{
ArrayList<Uri> attachmentsUris = new ArrayList<Uri>();
// Convert from paths to Android friendly Parcelable Uri's
for (String currAttachemntPath : p_attachments)
{
File fileIn = new File(currAttachemntPath);
Uri currAttachemntUri = Uri.fromFile(fileIn);
attachmentsUris.add(currAttachemntUri);
}
emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachmentsUris);
}
if (null != p_selectedEmailApp)
{
Log.d(TAG, "Sending email using " + p_selectedEmailApp);
emailIntent.setComponent(new ComponentName(p_selectedEmailApp.activityInfo.packageName, p_selectedEmailApp.activityInfo.name));
p_context.startActivity(emailIntent);
}
else
{
Intent emailAppChooser = Intent.createChooser(emailIntent, "Select Email app");
p_context.startActivity(emailAppChooser);
}
}
catch (Exception ex)
{
Log.e(TAG, "Error sending email", ex);
}
}
真棒修復! rfc822的東西甚至不起作用,我不知道爲什麼每個人都推薦它......也許它曾經在舊的Android上工作 – Soroush
這對我的工作只打開電子郵件應用:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:[email protected]"));
startActivity(intent);
有一些問題?你的郵件? –
在kitkat中有問題,即我嘗試以編程方式進行調用,但我無法 –
private void sendEmail(Connect connect) {
Intent email = new Intent(Intent.ACTION_SENDTO);
email.setData(Uri.parse("mailto:"));
email.putExtra(Intent.EXTRA_EMAIL, new String[]{connect.getEmail()});
email.putExtra(Intent.EXTRA_SUBJECT, "");
email.putExtra(Intent.EXTRA_TEXT, "");
try {
startActivity(Intent.createChooser(email, getString(R.string.choose_email_client)));
} catch (ActivityNotFoundException activityNotFoundException) {
UIUtils.showShortSnackBar(fragmentConnectLayout, getString(R.string.no_email_client));
}
}
參考https://developer.android.com/guide/components/intents-common.html#Email
試試這個
String subject = "Feedback";
String bodyText = "Enter text email";
String mailto = "mailto:[email protected]" +
"?cc=" + "" +
"&subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(bodyText);
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
//TODO: Handle case where no email app is available
}
信用:https://medium.com/@cketti/android-sending-email-using-intents-3da63662c58f
- 1. .net應用程序電子郵件解決方案?
- 2. Web應用程序的電子郵件解決方案?
- 3. 電子郵件意圖找不到電子郵件應用
- 4. 是否有任何Android電子郵件應用程序轉發傳入電子郵件的意圖?
- 5. Android:使用意圖發送電子郵件 - 僅提供電子郵件應用程序不起作用
- 6. 電子郵件應用程序組件
- 7. Android應用程序開發 - 直接發送電子郵件沒有意圖
- 8. 有沒有辦法通過意向從電子郵件應用程序獲取電子郵件?
- 9. 回到應用程序後,電子郵件意圖帶給你的電子郵件客戶端
- 10. 電子郵件意向關閉應用程序
- 11. 如何通過意向啓動電子郵件應用程序?
- 12. 電子郵件應用程序問題
- 13. Django - 電子郵件應用程序
- 14. PHP電子郵件應用程序
- 15. 如何解決Android電子郵件應用程序中的問題?
- 16. 谷歌應用程序API只審計傳出電子郵件
- 17. 發送電子郵件只有電子郵件客戶端應用程序在Android
- 18. 從程序發來的電子郵件
- 19. 來自iPhone應用程序的空白電子郵件
- 20. 來自iphone應用程序的自動電子郵件
- 21. 發送來自angular 2應用程序的電子郵件
- 22. 發送來自應用程序的電子郵件
- 23. 無法發送來自應用程序的電子郵件
- 24. 發送電子郵件從Android應用程序到用戶的電子郵件
- 25. 解決undefined在電子郵件URL
- 26. 如何限制Android應用程序中的電子郵件意圖?
- 27. 如何創建啓動任何電子郵件應用程序的意圖?
- 28. 使用默認的Android應用程序(Builtin電子郵件應用程序)在Android中發送電子郵件
- 29. 如何使用電子郵件應用程序從我的應用程序發送電子郵件?
- 30. 在Android中發送電子郵件只選擇電子郵件應用程序並指定附件MIME類型
粘貼您的代碼 – piotrpo
請保留原樣。如果你的數據真的是'message/rfc822'格式,那麼決定是否使用TubeMate取決於用戶,而不是你。 – CommonsWare
@CommonsWare不是真的......我有一項活動可以將電子郵件發送給支持團隊,我不想讓用戶發送電子郵件以外的其他選項。PS:我是一個大粉絲,上個月買了你的書:D – GabrielOshiro