Intent.ACTION_SEND
を使用してメールを送信しています。ただし、intent
を呼び出すと、メッセージの送信、電子メールの送信、およびBluetooth経由の送信の選択肢が表示されます。メールを送信する選択肢のみを表示するようにします。これどうやってするの?
Intent email = new Intent(Android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
編集:
タイプを"message/rfc822"
同様に。
これを試して....
私はこの答えを信用していませんが、この投稿に最も良い答えを与えると信じています。
Text/plainまたはtext/htmlを使用するのはよくある誤解です。これにより、Googleドライブ、Dropbox、Evernote、Skypeなど、コンテキストなしでプレーンテキストまたはHTMLテキストファイルを処理できるアプリケーションがトリガーされます。
代わりにACTION_SENDTO
を使用して、mailto:
Uriを提供します
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
その後、他の回答で提案されているように、セレクタを使用して続行できます。
ここで@PaulLammertsmaが回答 Android email chooser
@Ganapathy:表示Gmailのためにこのコードを試してください
Intent gmail = new Intent(Intent.ACTION_VIEW);
gmail.setClassName("com.google.Android.gm","com.google.Android.gm.ComposeActivityGmail");
gmail.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmail.setData(Uri.parse("[email protected]"));
gmail.putExtra(Intent.EXTRA_SUBJECT, "enter something");
gmail.setType("plain/text");
gmail.putExtra(Intent.EXTRA_TEXT, "hi Android jack!");
startActivity(gmail);
[APIレベルの解決策> = 15]
私は最終的に電子メールの送信に成功しました電子メールクライアントのみへの添付ファイル付き。それは私に多くの時間がかかり、他の人に役立つかもしれないので、ここに書いています。
問題は:
Intent.ACTION_SENDTOはデータURIを取ります(「mailto:」スキーマを指定できます)が、Intent:EXTRA_STREAMは受け入れません。
Intent.ACTION_SENDはIntent:EXTRA_STREAMを受け入れます(添付ファイルを追加できます)が、Typeのみを取ります(データURIではないため、「mailto:」スキーマを指定できません)。
そのため、Intent.ACTION_SENDを使用すると、ユーザーはsetType( "message/rfc822")であっても複数のアクティビティから選択できます。これは、App/Activitiesがすべてのファイルタイプ(通常はGDrive/Dropboxアプリ)を管理し、メッセージファイルをメールで管理できるためです。
ソリューションはsetSelectorメソッドにあります。このメソッドでは、Intent.ACTION_SENDTOを使用してアクティビティを選択し、その後Intent.ACTION_SENDインテントを送信できます。
ここで私のソリューションコード(添付ファイルはFileProviderから取得されましたが、任意のファイルを使用できます):
{
Intent emailSelectorIntent = new Intent(Intent.ACTION_SENDTO);
emailSelectorIntent.setData(Uri.parse("mailto:"));
final Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
emailIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
emailIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
emailIntent.setSelector( emailSelectorIntent );
Uri attachment = FileProvider.getUriForFile(this, "my_fileprovider", myFile);
emailIntent.putExtra(Intent.EXTRA_STREAM, attachment);
if( emailIntent.resolveActivity(getPackageManager()) != null )
startActivity(emailIntent);
}
これはあなたを助けます。
On your button click :
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
email.putExtra(Intent.EXTRA_SUBJECT, "subject");
email.putExtra(Intent.EXTRA_TEXT, "message");
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Choose an Email client :"));
ここで指摘されているmessage/rfc822
タイプを使用すると、 ACTION_SEND強制的に電子メールで送信 が問題を解決します。
アプリでも同様の問題が発生しました。最近、このリンクが公式のAndroid本当に役立つ開発者向けサイトです! Common Intents:Email
TL; DR:
Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.setData(Uri.parse("mailto:"));
これで、メールクライアントのみが表示されます!
これを行うことにより、件名と本文を追加できます。
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body" );
これはかなり古い質問ですが、「メールの送信」ソリューションを検索するときの最初の結果であり、すべての回答に共通の問題があることに気付きました。
_Intent.ACTION_SEND
_およびintent.setType("message/rfc822")
を使用すると、メールアプリだけでなく、処理可能なすべてのアプリanyが表示されますmessage/rfc822によるMIMEタイプのサポート、例えば_.mhtml
_、_.mht
_、_.mime
_。メールアプリのほかに、これはGoogleドライブ、Dropbox、Evernoteなどです。
セレクタをメールアプリのみに制限することがわかった唯一の解決策は、代わりにIntent.ACTION_SENDTOを使用することです。
_Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","[email protected]", null));
intent.putExtra(Intent.EXTRA_SUBJECT, "My Mail");
intent.putExtra(Intent.EXTRA_TEXT , "My Message");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (Android.content.ActivityNotFoundException ex) {
Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
_
最初の解決策:Intentパラメーターをより具体的にするようにしてください。インスタンスのメッセージ受信者を追加する
emailIntent .putExtra(Android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
2番目の解決策: パッケージマネージャー を使用して、メッセージを送信できるすべてのアプリケーションを検索し、使用するアプリケーションのみを選択します。
これは、Jack DsilvaとJignesh Mayaniのソリューションの組み合わせです。
try
{
Intent gmailIntent = new Intent(Intent.ACTION_SEND);
gmailIntent.setType("text/html");
final PackageManager pm = _activity.getPackageManager();
final List<ResolveInfo> matches = pm.queryIntentActivities(gmailIntent, 0);
String gmailActivityClass = null;
for (final ResolveInfo info : matches)
{
if (info.activityInfo.packageName.equals("com.google.Android.gm"))
{
gmailActivityClass = info.activityInfo.name;
if (gmailActivityClass != null && !gmailActivityClass.isEmpty())
{
break;
}
}
}
gmailIntent.setClassName("com.google.Android.gm", gmailActivityClass);
gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
gmailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
gmailIntent.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
gmailIntent.putExtra(Intent.EXTRA_TEXT, "Email message");
gmailIntent.setData(Uri.parse("[email protected]"));
this._activity.startActivity(gmailIntent);
}
catch (Exception e)
{
Intent i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
i.putExtra(Intent.EXTRA_SUBJECT, "Subject");
i.putExtra(Intent.EXTRA_CC, "[email protected]"); // if necessary
i.putExtra(Intent.EXTRA_TEXT, "Email message");
i.setType("plain/text");
this._activity.startActivity(i);
}
そのため、最初はGmailアプリを開こうとしますが、ユーザーが持っていない場合は2番目のアプローチが実装されます。
電子メールのみを送信するように制限する最適なコード。電子メールのみを送信するようにこのタイプを設定します。 i.setType("message/rfc822");
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (Android.content.ActivityNotFoundException ex) {
Toast.makeText(Firstclass.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
これは私の一日を救った。作成されたテキストメッセージをGmailアプリに直接送信します。
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
"mailto","togmail.com", null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Report message");
emailIntent.putExtra(Intent.EXTRA_TEXT, edt_msg.getText().toString());
startActivity(Intent.createChooser(emailIntent, "Send email..."));