Я использую Intent.ACTION_SEND
для отправки электронной почты. Однако, когда я вызываю intent
, он показывает выбор для отправки сообщения, отправки электронной почты, а также для отправки через Bluetooth. Я хочу, чтобы он показывал только варианты отправки электронной почты. Как я могу это сделать?
Использование Android Intent.ACTION_SEND для отправки электронной почты
Ответ 1
Intent email = new Intent(android.content.Intent.ACTION_SEND);
email.setType("application/octet-stream");
EDIT:
Вы также можете попробовать установить тип "message/rfc822"
.
попробуйте это....
Ответ 2
@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);
Ответ 3
Это поможет вам.
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 :"));
Ответ 4
Я не беру на себя ответственность за этот ответ, но я считаю, что он дает лучший ответ на этот пост.
Это распространенное заблуждение использовать текст /plain или text/html. Это приведет к запуску любого приложения, которое может обрабатывать простые текстовые файлы или HTML файлы без какого-либо контекста, включая Google Диск, Dropbox, Evernote и Skype.
Вместо этого используйте ACTION_SENDTO
, предоставляя mailto:
Uri
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
Затем вы можете продолжить использование выбора, как это предлагается с помощью других ответов.
Отвечено на @PaulLammertsma здесь Выбор электронной почты для Android
Ответ 5
Используя message/rfc822
, как указано здесь: ACTION_SEND принудительно отправляет по электронной почте, решает проблему.
Ответ 6
У меня была аналогичная проблема с моим приложением. Недавно я нашел эту ссылку официальным сайтом разработчиков Android, который действительно помогает! Общие намерения: электронная почта
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" );
Ответ 7
Первое решение: попробуйте быть более конкретным в ваших параметрах Intent. Добавить получателя сообщения, например
emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
Второе решение: используйте диспетчер пакетов, чтобы найти все приложения, способные отправить сообщение, и выбрать только те, которые вы хотите использовать.
Ответ 8
Я замечаю, что это довольно старый вопрос, но это первый результат при поиске решения "Отправить почту", и все ответы имеют общую проблему:
Использование Intent.ACTION_SEND
и intent.setType("message/rfc822")
приведет к выбору, который не только отображает почтовые приложения, но и все приложения, которые могут обрабатывать поддержку любого MIME-типа, посредством сообщения /rfc 822, например. .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();
}
Ответ 9
[Решение для API LEVEL >= 15]
Наконец-то мне удалось отправить электронное письмо С вложениями ТОЛЬКО почтовых клиентов. Я пишу это здесь, потому что мне потребовалось много времени, и это может быть полезно для других.
Проблема заключается в следующем:
-
Intent.ACTION_SENDTO принимает URI данных (поэтому вы можете указать "mailto:" схема), но он не принимает Intent: EXTRA_STREAM.
-
Intent.ACTION_SEND принимает намерение: EXTRA_STREAM (так что вы можете добавить ), но для этого требуется только тип (не URI данных), чтобы вы не могли укажите схему "mailto:" ).
Итак, Intent.ACTION_SEND позволяет пользователю выбирать из нескольких Актив, даже если вы устанавливаетеType ( "message/rfc822" ), потому что это приложение/действия может управлять всеми типами файлов (типично GDrive/Dropbox Apps) и, таким образом, даже файлы сообщений электронной почты.
Решение находится в методе setSelector. С помощью этого метода вы можете использовать Intent.ACTION_SENDTO для выбора Activity, но затем отправить Intent.ACTION_SEND Intent.
Здесь мой код решения (вложение пришло из 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);
}
Ответ 10
Лучший код, чтобы ограничить его отправкой только электронной почты. установите этот тип, чтобы отправить только электронное письмо. 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();
}
Ответ 11
Это комбинация решений Джека Дзилвы и Йиньэша Майяни:
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, и в случае, если у пользователя его нет, тогда будет реализован второй подход.
Ответ 12
Это спасло мой день. Он отправляет текстовое сообщение непосредственно в приложение 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..."));