Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");
startActivity(Intent.createChooser(intent, "Send Email"));
Приведенный выше код открывает диалоговое окно со следующими приложениями: - Bluetooth, Google Docs, Yahoo Mail, Gmail, Orkut, Skype и т. Д.
На самом деле, я хочу отфильтровать эти опции списка. Я хочу показывать только приложения, связанные с электронной почтой, например, Gmail, Yahoo Mail. Как это сделать?
Я видел такой пример в приложении Android Market.
- Откройте приложение Android Market
- Откройте любое приложение, в котором разработчик указал свой адрес электронной почты. (Если вы не можете найти такое приложение, просто откройте мое приложение: - market: // details? Id = com.becomputer06.vehicle.diary.free, ИЛИ поиск по «Дневнику автомобиля»)
- Прокрутите вниз до «РАЗРАБОТЧИК»
- Нажмите «Отправить письмо»
В диалоговом окне отображаются только приложения электронной почты, например, Gmail, Yahoo Mail и т. Д. В нем не отображаются Bluetooth, Orkut и т. Д. Какой код создает такой диалог?
String[]
, а не простоString
как показано здесь.Ответы:
когда вы измените ваш intent.setType, как показано ниже, вы получите
Используйте,
android.content.Intent.ACTION_SENDTO
чтобы получить только список почтовых клиентов, без facebook или других приложений. Просто почтовые клиенты. Пример:Я бы не советовал вам напрямую обращаться к почтовому приложению. Позвольте пользователю выбрать свое любимое почтовое приложение. Не сдерживайте его.
Если вы используете ACTION_SENDTO, putExtra не работает для добавления темы и текста в намерение. Используйте Uri, чтобы добавить тему и основной текст.
РЕДАКТИРОВАТЬ: Мы можем использовать
message/rfc822
вместо"text/plain"
MIME типа. Однако это не означает «предлагать только почтовые клиенты» - это означает «предлагать что-либо, поддерживающее данные message / rfc822». Это может легко включать некоторые приложения, которые не являются почтовыми клиентами.message/rfc822
поддерживает MIME типы.mhtml, .mht, .mime
источник
no apps installed to perform this intent
когда я используюACTION_SENDTO
. Я использую Android 4.1.2, и у меня установлено приложение электронной почты ...message/rfc822
. Это не то же самое, что отправка электронного письма.mailto:
Вместо этого используйте протокол, потому что именно это понимают почтовые клиенты.Принятый ответ не работает на 4.1.2. Это должно работать на всех платформах:
Надеюсь это поможет.
Обновление: согласно marcwjj , кажется, что на 4.3 нам нужно передать массив строк вместо строки для адреса электронной почты, чтобы он работал. Возможно, нам понадобится добавить еще одну строку:
Ссылка
источник
Uri.fromParts("mailto", "", null)
Есть три основных подхода:
1. Пользовательские
Uri
:2. Использование
Intent
дополнений:3. Поддержка библиотеки
ShareCompat
:источник
%
символ в буфере, некоторые символы в получающемся электронном письме не будут правильно закодированы. Вы должны выполнитьUri.encode
танец, предложенный @minipif.Это цитата из официального документа Android, я тестировал его на Android 4.4, и работает отлично. Смотрите другие примеры на https://developer.android.com/guide/components/intents-common.html#Email
источник
EXTRA_EMAIL
не работает для меня, поэтому я использовалUri.parse("mailto: " + myEmail)
Поздний ответ, хотя я нашел решение, которое могло бы помочь другим:
Версия на Java
Котлин версия
Это был мой вывод (предлагается только Gmail + Inbox):
Я получил это решение с сайта разработчиков Android .
источник
mailto
электронной почтой и пробелом не было места :mailto:abc@xyz.com
Это работает для меня:
т.е. используйте
ACTION_SENDTO
действие, а неACTION_SEND
действие. Я пробовал его на нескольких устройствах Android 4.4, и он ограничивает всплывающее окно выбора, отображающее только приложения электронной почты (электронная почта, Gmail, Yahoo Mail и т. Д.), И корректно вставляет адрес электронной почты и тему в сообщение.источник
Пытаться:
источник
message/rfc822
. Это не то же самое, что отправка электронного письма.mailto:
Вместо этого используйте протокол, потому что именно это понимают почтовые клиенты.Это правильный способ отправки электронной почты в соответствии с официальной документацией разработчика Android.
Добавьте эти строки кода в свое приложение:
Необязательно: Добавьте тело и тему, как это
Вы уже добавили эту строку, но приятно иметь новых пользователей
Это будет адрес получателя, то есть пользователь отправит вам (разработчику) электронное письмо.
источник
Наконец придумать лучший способ сделать
источник
Если вам нужны только почтовые клиенты, вы должны использовать
android.content.Intent.EXTRA_EMAIL
массив. Вот пример:источник
ACTION_SENDTO
Следующий код работает для меня нормально.
источник
От разработчиков документов для Android :
источник
Изменить: больше не работает с новыми версиями Gmail
Тогда это был единственный способ заставить его работать с любыми персонажами.
Ответ doreamon - правильный путь, так как он работает со всеми персонажами в новых версиях Gmail.
Старый ответ:
Вот мой. Кажется, он работает на всех версиях Android, с поддержкой темы и тела сообщения и полной поддержкой символов utf-8:
источник
Uri.encode
правильный путь. Но зачем называть это дважды для предмета и тела?Ни одно из этих решений не помогло мне. Вот минимальное решение, которое работает на Lollipop. На моем устройстве в результирующем списке выбора отображаются только Gmail и собственные почтовые приложения.
источник
Работает на всех версиях Android:
источник
Следующий Кодекс работал для меня!
источник
Это прекрасно работает для меня:
источник
Если вы хотите, чтобы ваше намерение обрабатывалось только почтовым приложением (а не другими текстовыми сообщениями или социальными приложениями), используйте это
ACTION_SENDTO
действие и включите схему данных «mailto:». Например:Я нашел это в https://developer.android.com/guide/components/intents-common.html#Email
источник
в Котлине, если кто-то смотрит
источник
Большинство из этих ответов работают только для простого случая, когда вы не отправляете вложение . В моем случае мне иногда нужно отправить вложение (ACTION_SEND) или два вложения (ACTION_SEND_MULTIPLE).
Поэтому я взял лучшие подходы из этой темы и объединил их. Он использует библиотеку поддержки,
ShareCompat.IntentBuilder
но я показываю только те приложения, которые соответствуют ACTION_SENDTO с "mailto:" uri. Таким образом, я получаю только список почтовых приложений с поддержкой вложений:источник
Использование
intent.setType("message/rfc822");
работает, но показывает дополнительные приложения, которые не обязательно обрабатывают электронную почту (например, GDrive). ИспользованиеIntent.ACTION_SENDTO
сsetType("text/plain")
является лучшим, но вы должны добавить,setData(Uri.parse("mailto:"))
чтобы получить лучшие результаты (только приложения электронной почты). Полный код выглядит следующим образом:источник
Если вы хотите настроить таргетинг на Gmail, сделайте следующее. Обратите внимание, что целью является "ACTION_SENDTO", а не "ACTION_SEND", и дополнительные поля намерения не являются обязательными для Gmail.
источник
Я обновляю ответ Адиля в Котлине,
источник
Пожалуйста, используйте код ниже:
источник
Может быть, вы должны попробовать это:
intent.setType("plain/text");
Я нашел это здесь . Я использовал его в своем приложении, и он показывает только параметры электронной почты и Gmail.
источник
plain/text
, а это даже не допустимый тип MIME. Это не то же самое, что отправка электронного письма.mailto:
Вместо этого используйте протокол, потому что именно это понимают почтовые клиенты.Составьте письмо в почтовом клиенте телефона:
источник
Использовать этот:
используйте build gradle:
источник
Это то, что я использую, и это работает для меня:
Это также позволит пользователю выбрать предпочитаемое приложение электронной почты. Единственное, что вам не разрешено делать, - это задать адрес электронной почты получателя.
источник
"
на 2-й строке.источник
источник